Сообщение 102, уровень 15, состояние 1 Строка 1 неправильный синтаксис около ‘n’

#sql #sql-server #tsql #syntax-error #osql

#sql #sql-сервер #tsql #синтаксическая ошибка #osql

Вопрос:

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

 echo populating Application table with values...

SET "installFile=%sqlDir%InstallDataFilesInsert_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
  

Комментарии:

1. Это точный сценарий в Insert_ApplicationNames.sql ?

2. да, единственное отличие в том, что есть еще 2 названия приложений, которые я вставляю вместе с вышеупомянутыми 3

3. Какую версию SQL Server вы используете?? Начиная с 2005 года, вы должны использовать sqlcmd утилиту, а не osql…

4. Есть ли у вас какие-либо триггеры вставки в вашей таблице приложений? Ваше сообщение об ошибке могло прийти оттуда.

Ответ №1:

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

Удалите их из своего скрипта — в предоставленном вами скрипте они в любом случае неуместны — и будьте готовы, гм, идти.

Ответ №2:

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

 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
  

Комментарии:

1. Попробовал оба ваших предложения, но все та же ошибка. Кроме того, многие другие sql-скрипты выполняются вместе с этим, используя тот же синтаксис, и все они выполняются правильно