2016-06-13 1 views
0

テーブルとプロシージャのセットをプログラムで新しいデータベースに取り込みたいとします。ダイナミックSQLで最近作成したデータベースの内部にテーブルを作成する方法は?

私は初期化スクリプトを用意しました。新しいデータベースを作成する必要があるプロシージャ内で使用します。

Iは、単純な例を試して動作しませんでした:

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 

私はこの手順を実行すると、それはマスターデータベースの代わりにTestDatabase1内部テーブルTestingを作成します。

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 
関連する問題