Неверный синтаксис рядом с ')'
У меня есть проект 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
2 ответа
Я получал похожие ошибки (одна с ')' как оскорбительный персонаж, одна с ';' как оскорбительный персонаж). Затем я заметил, что когда InstallShield импортировал мои скрипты, он изменил ">" на "& gt;" и "от" до "& lt;" и от "&" до "& amp;". Выполнение поиска и замены в импортированных сценариях в редакторе сценариев InstallShield для этих трех замен решило проблему для меня.
Представляется разумным, что эта ошибка может возникнуть, если вы написали оператор IN, который заполняется программно, только во время выполнения некоторые значения отсутствуют, что приводит к выражению "... WHERE x IN()", что недопустимо.
Это приведет к возникновению этой ошибки, а также к ошибке, которая может легко появиться в одной среде, но не в другой. Трудно дать больше деталей, чем на самом деле, не видя сценарий.