2009-04-10 41 views
0

這是針對MS SQL 2005的:任何人都知道爲什麼第一個成功,然後連續創建兩個相同的語句失敗?所有的陳述都完全一樣。將雙引號更改爲兩個單引號具有相同的效果。sp_MSforeachdb MS SQL錯誤

sp _ MSforeachdb @ command1 ='if(left(「?」,2)=「p _」)begin;打印「?」;結束;';

產生

p _ NationalBrands
p _ NonBrand
p _數據庫_名稱__開始_隨着_ P _下劃線

sp _ MSforeachdb @ command1 ='if(left(「?」,2)=「p _」)begin;打印「?」;結束;';
sp _ MSforeachdb @ command1 ='if(left(「?」,2)=「p _」)begin;打印「?」;結束;';

產生

消息102,級別15,狀態1,行2 附近有語法錯誤sp_MSforeachdb'。

回答

1

多個存儲過程調用每一個都需要EXEC(UTE)

EXEC sp_MSforeachdb @command1 = 'if (left(''?'', 2) = ''p_'') begin; print ''?''; end;'; 
EXEC sp_MSforeachdb @command1 = 'if (left(''?'', 2) = ''p_'') begin; print ''?''; end;'; 

我總是用2個單引號不是雙引號,以避免與QUOTED_IDENTIFERS環境設置的問題。

+0

實際上,只有在第一個調用之後才需要exec。 (就個人而言,我會把它作爲一個風格問題,但它不是必需的) – cmsjr 2009-04-13 02:45:09

1

你需要明確使用Exec時您呼叫以這種方式多特效,嘗試

sp_MSforeachdb @command1 = 'if (left("?", 2) = "p_") begin; print "?"; end;'; 
exec sp_MSforeachdb @command1 ='if(left("?", 2) = "p_") begin; print "?"; end;'; 

從文檔Execute

使用存儲過程

EXECUTE當您執行存儲的時,您不必指定EXECUTE 關鍵字程序當語句是 第一個批處理。在同一批次