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

Как вы можете видеть выше, в схеме есть хранимая процедура, я хочу динамически использовать эту схему.Как создать хранимую процедуру с динамической схемой

Поскольку у меня много баз данных с различными схемами, например MySchema1, MySchema2. Предположим, что я хочу выполнить мою выше хранимую процедуру в схеме 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 

Теперь эта процедура будет жить по схеме по умолчанию, но вы можете передать имя схемы и имя объекта во время выполнения для вызова объектов из разных схем.

Смежные вопросы