更新または挿入時にスクリプトを起動するトリガーを作成しました。しかし、トリガを実行すると、データベースがロックアップしてしまい、クエリを再度実行できるように再起動する必要があります。私はこれを引き起こすトリガーで何も見ていない。外部スクリプトファイルを起動するSQL Serverトリガー
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER TRIGGER [dbo].[CALCULATEDFIELDS]
ON [dbo].[custom_values]
AFTER INSERT, UPDATE
AS
SET NOCOUNT ON;
DECLARE @CUSTOMIZED_ID VARCHAR(15)
SELECT @CUSTOMIZED_ID = (SELECT customized_id FROM inserted)
BEGIN
DECLARE @OUTSTRING varchar(300)
BEGIN
IF NOT @CUSTOMIZED_ID IS NULL
SELECT @OUTSTRING = '\\DRIVE\Folder\Script.vbs '+ @CUSTOMIZED_ID
ELSE
SELECT @OUTSTRING = '\\DRIVE\Folder\Script.vbs '+ @CUSTOMIZED_ID
EXEC master..xp_cmdshell @OUTSTRING, NO_OUTPUT
END
END
あなたのトリガーには、**行ごとに**と呼ばれると思われるという点でメジャー**の欠陥があります。**は**該当しません。トリガは**文ごとに** **起動します。したがって、このトリガを起動させる 'INSERT'文が25行挿入された場合、トリガは一度**発生しますが、' Inserted'擬似テーブルは25行あります。あなたのコードがここで選択する25行のうちどれですか? 'SELECT customized_id FROM inserted' - それは非決定論的です。**任意の行**を取得し、**すべての他の行を無視します**。これを考慮に入れてトリガーを書き直す必要があります。 –
"customized_id"の行が挿入されているすべての行で同じになるかどうかは重要ですか?私は実際には、更新または挿入が行われたときにその値を取得する必要があります。 – AlexF11