Я написал триггер, который проверяет ограничения внешнего ключа между двумя различными базами данных. Он работает, однако я хотел добавить возможность определить, какая запись вызвала «нарушение ограничения внешнего ключа» в RAISERROR. Я добавил объявленную переменную @SourceParameterTemplateID в первый оператор SELECT, что делает его равным полю, которое я ищу. Когда я это делаю, я получаю две ошибки «Неправильный синтаксис рядом». Первый - на '=', а второй - на последнем ')'. Я искал возможное решение, однако из того, с чем я столкнулся, это должно работать. Любое понимание было бы весьма благодарным.SQL Server 2012 Неправильный синтаксис около '='
Create Trigger AV.testfkTrigger ON [AQB_MON].[AV].[NAAQValue]
FOR INSERT, UPDATE
AS
BEGIN
SET NOCOUNT ON;
Declare @SourceParameterTemplateID varchar(25)
IF EXISTS (
SELECT TOP 1 @SourceParameterTemplateID = [SourceParameterTemplateID]
FROM INSERTED AS I
WHERE NOT EXISTS (
SELECT *
FROM [AVData].[dbo].[SourceParameterTemplate] AS A
WHERE I.[SourceParameterTemplateID] = A.[SourceParameterTemplateID]
)
order by [SourceParameterTemplateID]
)
BEGIN
RAISERROR('Violation of foreign key constraint',16,1, @SourceParameterTemplateID);
ROLLBACK;
END
END
Вы хотите: @SourceParameterTemplateID = Выбор TOP 1 [SourceParameterTemplateID] для линии 8? – Chuck
Это действительно не понравилось. Он поместил ошибку «Неверный синтаксис рядом» на @SourceParameterTemplateID и сделал [SourceParameterTemplateID] недопустимым именем столбца. –
CASE WHEN удалил ошибки «Неправильный синтаксис рядом», однако триггер работал как исходный триггер без дополнительной работы по добавлению дополнительной переменной в RAISERROR. –