Сообщение 102, Уровень 15, состояние 1 Строка 1 Неверный синтаксис рядом с 'n'

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

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 ответа

Решение

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

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

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

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
Другие вопросы по тегам