0

我有一个在安装过程中运行 SQL 脚本的 BasicMSI 项目(Installshield 2009)。在安装过程中,我收到以下错误。

错误 27506。执行 SQL 脚本 {SCRIPTNAME} 时出错。第 352 行。')' 附近的语法不正确。(102)

问题是我在脚本的第 352 行没有任何“)”,如果我使用 SQL Management Studio Express 运行它,该脚本也可以正常工作。

谁能告诉我问题是什么,我该如何解决?谢谢。

PS。我无法将脚本错误处理选项设置为“On Error, Goto Next Statement”,因为它不会创建我的一些外键。

IF NOT EXISTS (SELECT * FROM sys.triggers WHERE object_id = OBJECT_ID(N'[dbo].[TRIGGER_NAME]'))
EXEC dbo.sp_executesql @statement = N'
CREATE TRIGGER [dbo].[TRIGGER_NAME]
ON [dbo].[TABLE_NAME]                  -- LINE: 352
INSTEAD OF INSERT
AS
BEGIN 
DECLARE @Count INT;
SET @Count = (SELECT COUNT([Name]) 
                FROM TABLE_NAME
                WHERE IsDeleted = 0 AND [Name] IN (SELECT [Name] FROM INSERTED));

IF @Count > 0
BEGIN
    RAISERROR (''Error Message.'', 16, 1);
    Rollback;   
END
ELSE
BEGIN
    INSERT INTO dbo.TABLE_NAME SELECT {Columns} FROM INSERTED;
    SELECT CONVERT(BigInt,SCOPE_IDENTITY()) AS [value]
END
END
' 
GO
4

2 回答 2

1

我遇到了类似的错误(一个带有')'作为违规字符,一个带有';' 作为冒犯的角色)。然后我注意到当 InstallShield 导入我的脚本时,它已将“>”更改为“>” 和“<”到“<” 和“&”到“&”。在 InstallShield 脚本编辑器中对导入的脚本进行搜索和替换这三个替换为我解决了这个问题。

于 2011-08-04T15:40:02.837 回答
0

如果您编写了一个以编程方式填充的 IN 语句,则可能会发生此错误似乎是合理的,只是在运行时缺少一些值,从而导致语句显示“... WHERE x IN()”,这是无效的。

这会产生那个错误,而且,它是一个很容易出现在一个环境中而不是另一个环境中的错误。如果没有实际看到脚本,很难提供比这更详细的信息。

于 2009-07-14T10:23:21.753 回答