我可以在SQL Server中的存储过程中创建模式

时间:2013-09-10 07:00:23

标签: sql-server sql-server-2008

我可以在SQL Server中的schema中创建Store Procedure吗?我试过这个

 CREATE PROCEDURE makadmin.createCustomerSchema 
 (@tenant nvarchar(30) ,
  @companyId int , 
  @saleId bigint  )
  AS
  Begin
  create schema @tenant authorization  createcustomerschema)
  End

是否可能或我朝错误的方向前进?

2 个答案:

答案 0 :(得分:3)

要从存储过程中发出CREATE语句,请使用EXEC sp_executesql

CREATE PROCEDURE createCustomerSchema 
 (@tenant nvarchar(30) ,
  @companyId int , 
  @saleId bigint  )
  AS
  Begin
    declare @sql nvarchar(4000) = 'create schema ' + @tenant + ' authorization  createcustomerschema';

    EXEC sp_executesql @sql

  End

答案 1 :(得分:2)

您不能这样做,因为'CREATE SCHEMA'必须是查询批次中的第一个语句。

您可以使用动态sql创建以下模式,最好检查数据库中是否已存在模式。

DECLARE @cmd varchar(1000)
IF NOT EXISTS (SELECT * FROM sys.schemas WHERE name = @tenant)
  BEGIN
    SET @cmd='CREATE SCHEMA '+@tenant + ' authorization  createcustomerschema';
    EXEC (@cmd);
  END;