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
我编写了一个触发器来检查两个不同数据库之间的外键约束。它有效,但我想添加识别哪个记录导致 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