2009-09-14 27 views
2

在SQL Server,以下工作:爲什麼包含所有者的系統存儲過程會失敗?

sp_help MyProc 
sp_depends MyTable 

但是如果包括老闆,失敗有語法錯誤:

sp_help dbo.MyProc 
sp_depends dbo.MyTable 

它讓你把引號帕拉姆爲它工作。然而,我可以做以下沒有問題:

exec dbo.MyProc 

爲什麼不一致?有理由嗎?

回答

2

SQL Server允許省略單字串參數單引號:

這將輸出test

CREATE PROCEDURE prc_test (@objname NVARCHAR(255)) 
AS 
BEGIN 
     SELECT @objname 
END 

prc_test test 

,但是這將失敗:

prc_Test Cannot_insert_a_dot.here 

這裏,test'test'的簡寫形式(注意單引號)。

SP_HELP是一個存儲過程,需要一個VARCHAR參數,而EXECUTE期望的對象標識符(其中一個數據庫名稱是有效的部分)

exec dbo.MyProc 

您的字符串常量始終封閉成單引號和它可附上對象名稱放在括號中是一個好主意:

EXEC [dbo].[myproc] 
+0

我應該知道你打算完成你的答案 – 2009-09-14 15:34:34

1

完成Quassnoi答案。

SP_Help是主數據庫中的一個SP,其中SP的名稱採用NVarchar參數。 如果你使用它始終如一,你應該叫

sp_help 'MyProc' 

而且,與此相同的約定

sp_help 'dbo.MyProc' 

工作正常。

問題是,當您撥打sp_help MyProc時,SQL Server會爲您添加單引號,但在SP的名稱中使用點時,這不起作用。

相關問題