Я написал триггер, который при обновлении или вставке запускает скрипт. Однако, когда запускается триггер, он заканчивает блокировку моей базы данных, и я должен сделать перезапуск, чтобы снова выполнять запросы. Я не вижу ничего в триггере, который мог бы вызвать это.Триггер 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 вставлен' - он не детерминирован, вы получите ** одну произвольную строку **, и вы будете ** игнорируете все остальные строки **. Для этого нужно переписать триггер! –
Будет ли это иметь значение в том случае, если строка «customized_id» будет одинаковой для каждой вставленной строки? Мне просто нужно получить эту ценность, когда будет сделано обновление или вставка. – AlexF11