2016-06-13 51 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 

當我執行這個程序,它會創建主數據庫,而不是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 
相關問題