我有一个BasicMSI项目(Installshield 2009),它在安装过程中运行SQL脚本。 在安装过程中,我收到以下错误。
错误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
答案 0 :(得分:1)
我得到了类似的错误(一个带有')'作为有问题的角色,一个有';'作为违规的人物)。然后我注意到,当InstallShield导入我的脚本时,它已经改变了“>”到“& gt;”和“<”到“& lt;”和“&”到“& amp;”。在InstallShield脚本编辑器中对这三个替换的导入脚本进行搜索和替换,为我解决了这个问题。
答案 1 :(得分:0)
如果您编写了一个以编程方式填充的IN语句,只是在运行时会丢失一些值,导致语句中出现“... WHERE x IN()”,这似乎是合理的。无效。
这会产生该错误,而且,这是一个错误,很容易出现在一个环境中而不是另一个环境中。如果没有真正看到剧本,很难提供更多细节。