消息102,级别15,状态1行1'n'附近的语法错误
问题描述:
我有以下查询,我正在使用批处理文件运行。在批处理文件我用下面的语法:消息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
答
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
+0
尝试了你的建议,但仍然是同样的错误。此外,许多其他的SQL脚本正在使用相同的语法正在执行,并且它们都正确执行 – EndlessSpace 2011-05-06 19:01:03
这是'Insert_ApplicationNames.sql'中的确切脚本吗? – 2011-05-06 18:36:02
是的,唯一的区别是我有两个以上的应用程序名称与上面一起插入3 – EndlessSpace 2011-05-06 18:39:07
您使用哪种**版本**的SQL Server?从2005年起,您应该使用'sqlcmd'实用程序而不是osql ... – 2011-05-06 19:20:22