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

标签 sql-server triggers syntax-error

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

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

关于sql-server - SQL Server 2012 '='附近的语法不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35589970/

相关文章:

Javascript 语法错误...我怎样才能找到更多信息?

sql-server - 来自 TFS 构建代理的间歇性 Azure 数据库连接

PHP 限制 session var sql 错误

sql-server - Sql Server 2014 - 更新到 Windows 10 并且无法连接到本地服务器

sql - mysql 触发器到 oracle 触发器

sql-server - 在触发器中查找多个更新的列

mysql - 在 MySQL DBMS 中引发应用程序错误触发器

syntax - Kotlin : Why is defining a field as “var” /“val” needed in constructor?

sql-server - 我们可以为 SQL Server 中的存储过程声明多少个 OUTPUT 参数?

sql - 查询一个月的第一天和最后一天