Сообщение 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