在SQL Server,以下工作:爲什麼包含所有者的系統存儲過程會失敗?
sp_help MyProc
sp_depends MyTable
但是如果包括老闆,失敗有語法錯誤:
sp_help dbo.MyProc
sp_depends dbo.MyTable
它讓你把引號帕拉姆爲它工作。然而,我可以做以下沒有問題:
exec dbo.MyProc
爲什麼不一致?有理由嗎?
在SQL Server,以下工作:爲什麼包含所有者的系統存儲過程會失敗?
sp_help MyProc
sp_depends MyTable
但是如果包括老闆,失敗有語法錯誤:
sp_help dbo.MyProc
sp_depends dbo.MyTable
它讓你把引號帕拉姆爲它工作。然而,我可以做以下沒有問題:
exec dbo.MyProc
爲什麼不一致?有理由嗎?
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]
完成Quassnoi答案。
SP_Help
是主數據庫中的一個SP,其中SP的名稱採用NVarchar
參數。 如果你使用它始終如一,你應該叫
sp_help 'MyProc'
而且,與此相同的約定
sp_help 'dbo.MyProc'
工作正常。
問題是,當您撥打sp_help MyProc
時,SQL Server會爲您添加單引號,但在SP的名稱中使用點時,這不起作用。
我應該知道你打算完成你的答案 – 2009-09-14 15:34:34