如何使用动态架构创建存储过程

时间:2014-04-21 12:15:48

标签: sql sql-server sql-server-2008 stored-procedures

Create MySchema.MySpName
As
Begin
   Select * from MyTable
End

如上所示,架构MySchema中存在一个存储过程,我想动态使用此架构。

由于我有许多具有不同模式的数据库,例如MySchema1MySchema2。假设我想在模式MySchema1中执行上面的存储过程,所以我希望我的存储过程将使用模式MySchema1.MySpName

创建

任何建议。

1 个答案:

答案 0 :(得分:1)

在没有指定架构的情况下无法创建过程,因此在SQL Server中创建的任何对象都是架构绑定的,这是SQL Server 2005中实现的SQL Server安全约束。

SQL Server中的所有对象都必须位于特定架构下。现在,在你的情况下,你有两个选择。

  1. 在数据库的每个架构中创建此过程。

  2. 在任何一个模式中创建一个过程,在过程内部使其接受对象名称和模式名称。

  3. 示例

    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
    

    现在,此过程将存在于默认架构下,但您可以在运行时传递架构名称和对象名称以调用来自不同架构的对象。