Erick Asto Oblitas
Erick Asto Oblitas

Reputation: 1409

How to create a table inside of recently created database with dynamic sql?

I want to populate a set of tables and procedures into new databases programmatically.

Then I prepared a Initialize Script and I will use it inside a procedure who must created new databases.

I tried with a simple example and didn't work:

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

When I execute this procedure, it creates the table Testing inside master database instead of TestDatabase1.

EXEC PROCEDURETOREPLICATECOMMONSCHEMA 'TestDatabase1'
GO

Upvotes: 0

Views: 58

Answers (2)

Praveen ND
Praveen ND

Reputation: 560

Please make use of the below code. Its working fine with 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

Upvotes: 0

gotqn
gotqn

Reputation: 43636

First create the database, then create the table (two separate statements):

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

Upvotes: 3

Related Questions