#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-скрипты выполняются вместе с этим, используя тот же синтаксис, и все они выполняются правильно