消息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 
+0

这是'Insert_ApplicationNames.sql'中的确切脚本吗? – 2011-05-06 18:36:02

+0

是的,唯一的区别是我有两个以上的应用程序名称与上面一起插入3 – EndlessSpace 2011-05-06 18:39:07

+2

您使用哪种**版本**的SQL Server?从2005年起,您应该使用'sqlcmd'实用程序而不是osql ... – 2011-05-06 19:20:22

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