SQL Server 2012 '=' 附近的语法不正确

SQL Server 2012 Incorrect syntax near '='

我编写了一个触发器来检查两个不同数据库之间的外键约束。它有效,但我想添加识别哪个记录导致 RAISERROR 中“违反外键约束”的能力。我将声明的变量 @SourceParameterTemplateID 添加到第一个 SELECT 语句中,使其等于我要查找的字段。当我这样做时,我收到两个“Incorrect Syntax Near”错误。第一个在 '=' 上,第二个在最后一个 ')' 上。我一直在寻找一种可能的解决方案,但是从我遇到的情况来看,这应该可行。任何见解将不胜感激。

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

这部分 IF EXISTS (SELECT TOP 1 @SourceParameterTemplateID 导致语法错误。您可以同时使用 EXIST 和分配给 SourceParameterTemplateID。您可以使用以下语法解决此问题:

CREATE TRIGGER AV.testfkTrigger ON [AQB_MON].[AV].[NAAQValue]
    FOR INSERT, UPDATE
AS
    BEGIN
       SET NOCOUNT ON;
       DECLARE @SourceParameterTemplateID VARCHAR(25)
       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]

       IF @SourceParameterTemplateID IS NOT NULL 
          BEGIN
             DECLARE @msg VARCHAR(250)
             set @msg = 'Violation of foreign key constraint for SourceParameterTemplateID: ' + CAST(@SourceParameterTemplateID AS VARCHAR(50))
             RAISERROR(@msg,16,1);
             ROLLBACK;
          END
    END