2011-01-05 65 views
0

有誰知道如何獲得編譯時驗證傳遞給存儲過程的參數。示例如果Proc1調用Proc2,但爲Proc2指定了無效的參數名稱。目前我在運行時發現。有沒有辦法找出我創建Proc1的時間?SQL Server存儲過程編譯時驗證

謝謝了, 湯姆

回答

0

這是不可能的。對於你給的場景。

create proc dbo.foo 
@a int 
as 
select 1 

go 

create proc dbo.bar 
as 
exec dbo.foo @b=10 

檢測錯誤的唯一方法是執行它。顯然你可以在一個事務中執行回滾和自動執行這些測試。

+0

謝謝馬丁。你完全理解這個問題。即使它在一個事務中,我也不想執行一個執行,因爲我必須爲每個存儲過程編寫執行語句。你確定這是不可能的嗎?我認爲另一個工具做了驗證,比如Visual Studio,但不確定。我想知道如果事實上他們這麼做,另一種工具會如何去做。我可以編寫一個應用程序來遍歷所有過程並在事務中調用它們中的每一個。 – Thomas 2011-01-07 13:35:01

+0

@Thomas - 我試過'SET NOEXEC ON'和'SET PARSEONLY ON'如這裏討論http://stackoverflow.com/questions/3084387/how-can-i-programmatically-check-parse-the-validity-of- a-tsql語句,因此我的結論也沒有給出任何錯誤。再看一遍,雖然我看到SSMS intellisense給出了消息「@b不是程序foo的參數」。我不確定是否有任何方法可以利用它在那裏進行的檢查。另外運行SET FMTONLY ON exec dbo.bar會返回一個錯誤信息。 – 2011-01-07 13:56:38