我想以编程方式将一组表和过程填充到新数据库中。
然后我准备了一个Initialize Script,我将在必须创建新数据库的过程中使用它。
我尝试了一个简单的例子并且没有工作:
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
执行此过程时,它会在master数据库中创建表Testing
而不是TestDatabase1
。
EXEC PROCEDURETOREPLICATECOMMONSCHEMA 'TestDatabase1'
GO
答案 0 :(得分: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
答案 1 :(得分: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