Create MySchema.MySpName
As
Begin
Select * from MyTable
End
如上所示,架构MySchema
中存在一个存储过程,我想动态使用此架构。
由于我有许多具有不同模式的数据库,例如MySchema1
,MySchema2
。假设我想在模式MySchema1
中执行上面的存储过程,所以我希望我的存储过程将使用模式MySchema1.MySpName
任何建议。
答案 0 :(得分:1)
在没有指定架构的情况下无法创建过程,因此在SQL Server中创建的任何对象都是架构绑定的,这是SQL Server 2005中实现的SQL Server安全约束。
SQL Server中的所有对象都必须位于特定架构下。现在,在你的情况下,你有两个选择。
在数据库的每个架构中创建此过程。
在任何一个模式中创建一个过程,在过程内部使其接受对象名称和模式名称。
示例强>
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
现在,此过程将存在于默认架构下,但您可以在运行时传递架构名称和对象名称以调用来自不同架构的对象。