2011-05-06 56 views
2

我有以下查詢,我正在使用批處理文件運行。在批處理文件我用下面的語法:消息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

回答

2

GO是Management Studio中(默認)批處理分隔的關鍵字,但它不是一個真正的SQL關鍵字(即SQL Server不能識別它)。

刪除腳本中的腳本 - 在您提供的腳本中,無論如何它們都是無關緊要的 - 而且您應該善於這樣做。

0

好奇你的變量是否應該對開關正確。嘗試這個?

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

相關問題