2016-06-13 3 views
0

Я хочу, чтобы программным путем заполнить набор таблиц и процедур в новые базы данных.Как создать таблицу внутри недавно созданной базы данных с динамическим sql?

Затем я подготовил сценарий инициализации, и я буду использовать его внутри процедуры, которая должна создавать новые базы данных.

Я попытался с помощью простого примера и не получилось:

CREATE PROCEDURE PROCEDURETOREPLICATECOMMONSCHEMA 
    @databaseName NVARCHAR(40) 
AS 
BEGIN 
    DECLARE @sqlCreation NVARCHAR(MAX); 
    SET @sqlCreation = ' 
     USE MASTER; 

     EXEC(''CREATE DATABASE ' + @databaseName + '''); 

     EXEC(''USE ' + @databaseName + '''); 

     CREATE TABLE Testing 
     (
      TestPk int, 
      TestDescription nvarchar(80) 
     ); 
    '; 

    PRINT @sqlCreation; 
    EXEC sp_executesql @sqlCreation; 
END 
GO 

Когда я выполнить эту процедуру, она создает таблицу Testing в основной базе данных вместо TestDatabase1.

EXEC PROCEDURETOREPLICATECOMMONSCHEMA 'TestDatabase1' 
GO 

ответ

3

Сначала создайте базу данных, а затем создать таблицу (два отдельных операторов):

CREATE PROCEDURE PROCEDURETOREPLICATECOMMONSCHEMA 
    @databaseName NVARCHAR(40) 
AS 
BEGIN 
    DECLARE @sqlCreation NVARCHAR(MAX); 
    SET @sqlCreation = 'USE MASTER; 
         EXEC(''CREATE DATABASE ' + @databaseName + ''');'; 

    EXEC sp_executesql @sqlCreation; 

    SET @sqlCreation = 'EXEC(''USE ' + @databaseName + '''); 

     CREATE TABLE ' + @databaseName + '.dbo.Testing 
     (
      TestPk int, 
      TestDescription nvarchar(80) 
     );'; 

    EXEC sp_executesql @sqlCreation; 
END 
GO 

enter image description here

0

Пожалуйста использовать код ниже. Он отлично работает с SQL Server 2012.

CREATE PROCEDURE PROCEDURETOREPLICATECOMMONSCHEMA 
    @databaseName NVARCHAR(40) 
AS 
BEGIN 
    BEGIN 
    EXEC('USE MASTER;CREATE DATABASE ' + @databaseName + ';') 
    EXEC('CREATE TABLE ' + @databaseName + '.dbo.Testing(TestPk int,TestDescription nvarchar(80));') 
END 
END 
GO