テーブルMessage
には既にトリガーがあります。私たちは、トリガーの上有効時はいつでも問題は、挿入の動作を停止していることがSql Server 2008トリガー
ALTER TRIGGER [dbo].[AddSettlementOnINSERT]
ON [dbo].[TblSettlement]
After INSERT
AS
DECLARE @id Bigint, @Lat Float,@Long Float, @LocName Varchar(200), @Dist float,@upd bit
Set @upd = (SELECT updated FROM inserted)
SET @id = (SELECT MessageID FROM inserted)
SET @lat = (SELECT [Lat] FROM inserted)
SET @Long = (SELECT [Long] FROM inserted)
if (@upd = 0)
begin
declare @table table
(Location Varchar(200),Distance float)
insert into @table
SELECT top 1 Full_Name_nd, SQRT(
POWer(69.1 * (lat - @lat), 2) +
POWer(69.1 * (@long - long) * COS(lat/57.3), 2))As distance
FROM geodb.dbo.geonames where SQRT(
POWer(69.1 * (lat - @Lat), 2) +
POWer(69.1 * (@Long - long) * COS(lat/57.3), 2)) < 1
set @LocName = (select location from @table)
set @Dist = (select distance from @table)
Insert into dbo.tblset2
(Messageid,lat,long,settlement,distance)values(@id,@lat,@long,@locName,@Dist)
end
:テーブルtblSettlement
オン
Insert into tblSettlement (MessageID,Lat,Long) Select Messageid,y,x from inserted
私はそのトリガーを配置している:そのトリガー内で首尾よく実行している私はinsert
文を持っていますMessage
テーブル。
意味:挿入後、わずかなカラム値をとり、同じテーブルのトリガーで別のテーブルを更新しようとします。実際に私たちが挿入することはできません。
'SELECT'クエリを単独で実行して結果を検証できますか?この節 - 'SQRT(69.1 *(lat - @Lat)、2)+ POWer(69.1 *(ロング - ロング)* COS(緯度/ 57.3)、2))<1 'は私にとって疑わしい。 – Yuck
正確にはどうなりますか?エラーメッセージはありますか? 「挿入がうまくいかない....挿入するのを許可しない」という情報が十分ではないため、診断に役立ちません。 **どの部分が問題を引き起こす可能性があるかをデバッグするために、特別なコンテキストでトリガのTSQLを実行しましたか?** –
返信いただきありがとうございます。はい、私は孤立してコードを実行して、それは動作します....しかし、私たちが有効にすると&poblemは、メッセージテーブルのレコード挿入を停止します:((それはバックエンドサービスによって管理されています) –