Сообщение 102, Уровень 15, состояние 1 Строка 1 Неверный синтаксис рядом с 'n' - PullRequest
2 голосов
/ 06 мая 2011

У меня есть следующий запрос, который я выполняю, используя командный файл. В командном файле я использую следующий синтаксис:

echo populating Application table with values...

SET "installFile=%sqlDir%\Install\DataFiles\Insert_ApplicationNames.sql"

OSQL /n /i "%installFile%" /d%db% /U%user% /P%pswd% /S%serv%
echo
echo populated Application table with values in Insert_ApplicationNames.sql
echo

Показанный ниже sql запускается без каких-либо ошибок при выполнении из SQL Management Studio, но при запуске как часть пакетного сценария он продолжает давать ошибки Может ли кто-нибудь помочь мне понять, что я здесь делаю неправильно?

Кроме того, строки вставляются, но наша ночная установка QA прерывается из-за ошибки, выдаваемой пакетным скриптом.

IF NOT EXISTS(SELECT * FROM Application WHERE name = '')
BEGIN
    INSERT INTO Application
    (Name)
    VALUES
    ('')
END
GO
IF NOT EXISTS(SELECT * FROM Application WHERE name = 'App1.exe')
BEGIN
    INSERT INTO Application
    (Name)
    VALUES
    ('App1.exe')
END
GO
IF NOT EXISTS(SELECT * FROM Application WHERE name = 'App2.exe')
BEGIN
    INSERT INTO Application
    (Name)
    VALUES
    ('App2.exe')
END

Ответы [ 2 ]

2 голосов
/ 08 мая 2011

GO - это ключевое слово (по умолчанию) разделителя пакетов в Management Studio, но оно не является real ключевым словом SQL (т. Е. SQL Server его не распознает).

Удалите их из вашего сценария - в предоставленном вами сценарии они в любом случае не имеют значения - и вы должны хорошо идти ...

0 голосов
/ 06 мая 2011

Любопытно, должны ли ваши переменные быть прямо напротив переключателей.Попробуйте это?

OSQL -n -i "%installFile%" -d %db% -U %user% -P %pswd% -S %serv%

Что происходит, когда вы используете строку выше с вашими известными правильными значениями прямо в команде?

OSQL -n -i "C:\foo.sql" -d MyDB -U MyUser -P MyPwd -S MyServ
...