2014-07-11 63 views
0

我在SQL Server 2008中,如存儲過程:SQL Server在存儲過程中如何查找對象名稱?

CREATE PROCEDURE [dbo].[test] 
AS 
BEGIN 
    SET NOCOUNT ON; 
    SELECT user_name(); 
    SELECT SCHEMA_NAME() 
    SELECT * FROM MyView 
END 

我有一個名爲testuser.MyView視圖。

exec as user = 'testuser' exec test 

這說明user_name和SCHEMA_NAME都被設置爲TESTUSER 但我也得到一個Invalid object name 'MyView'.消息,作爲SP仍然在dbo架構查找視圖名稱:然後我用調用SP 。

有沒有辦法改變SP的執行方式,這樣MyView對象引用testuser.MyView而不必使用完全限定名稱?

我想在不同模式的相同表結構上使用一組很多存儲過程。我真的希望避免使用動態SQL重寫所有SP,或者使用限定名稱創建所有SP的副本。

回答

1

使用模塊所有者的默認模式解析不合格的對象名稱。這種行爲不能改變,所以你需要訴諸你提到的其他方法。

由於您已經爲具有相同結構的每個用戶創建單獨的表和視圖,爲什麼不能同時在用戶的模式中創建存儲過程呢?

+0

謝謝丹。我擔心可能會是這樣。 SP非常複雜,其中有很多,所以我想避免100個重複的SP。我想擦除和重建所有腳本都是唯一的解決方案。 – geographika

相關問題