Неверный синтаксис рядом с ')' - PullRequest
0 голосов
/ 14 июля 2009

У меня есть проект BasicMSI (Installshield 2009), который выполняет сценарий SQL во время процесса установки. Во время установки я получаю следующую ошибку.

Ошибка 27506. Ошибка при выполнении сценария SQL {SCRIPTNAME}. Строка 352. Неверный синтаксис рядом с ')'. (102)

Проблема в том, что у меня нет строки ')' в строке 352 сценария, а также сценарий работает без проблем, если я запускаю его с SQL Management Studio Express.

Может кто-нибудь сказать мне, в чем проблема и как я могу это исправить? Спасибо.

PS. Я не могу установить опцию обработки ошибок скрипта на «При ошибке, перейти к следующему утверждению», потому что для этого он не будет создавать некоторые из моих внешних ключей.

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 ]

1 голос
/ 04 августа 2011

Я получаю похожие ошибки (одна с ')', как с оскорбительным символом, одна с ';' как оскорбительный персонаж). Затем я заметил, что когда InstallShield импортировал мои скрипты, он изменил ">" на "& gt;" и "от" до "& lt;" и от "&" до "& amp;". Выполнение поиска и замены в импортированных сценариях в редакторе сценариев InstallShield для этих трех замен решило проблему для меня.

0 голосов
/ 14 июля 2009

Кажется разумным, что эта ошибка может возникнуть, если вы написали оператор IN, который заполняется программно, только во время выполнения некоторые значения отсутствуют, в результате чего получается оператор "... WHERE x IN ()", который неверно.

Это сгенерирует эту ошибку, а также ошибку, которая может легко появиться в одной среде, но не в другой. Трудно дать больше деталей, чем на самом деле, не видя сценарий.

...