2014-04-21 23 views
1
Create MySchema.MySpName 
As 
Begin 
    Select * from MyTable 
End 

正如您在上面看到的,模式MySchema中有一個存儲過程,我想動態使用此模式。如何使用動態模式創建存儲過程

由於我有很多數據庫,不同的架構如MySchema1MySchema2。假設我想在模式MySchema1中執行我上面的存儲過程,所以我希望我的存儲過程將使用模式MySchema1.MySpName

創建任何建議。

回答

1

有沒有辦法不指定模式,併爲此事在SQL Server中創建的任何對象綁定到架構這個創建過程在SQL Server中實現安全約束的SQL Server 2005。

所有對象SQL Server必須在特定的模式下。現在你有兩種選擇。

  1. 在數據庫的每個模式中創建此過程。

  2. 在任何一個模式中創建一個過程,並在過程中使其接受對象名稱和模式名稱。

CREATE PROCEDURE dbo.Proc_Name 
@SchemaName NVARCHAR(128), 
@TableName NVARCHAR(128) 
AS 
BEGIN 
SET NOCOUNT ON; 

    DECLARE @Sql NVARCHAR(MAX); 

    SET @Sql = N' SELECT * FROM ' + QUOTENAME(@SchemaName) 
      + N'.' + QUOTENAME(@TableName) 

    EXECUTE sp_executesql @Sql 

END 

現在,這個過程會活得默認模式下,但是你可以通過模式名,在運行時對象名稱來調用不同方案的對象。