如何在存储过程中使用模式创建新数据库?

时间:2012-01-10 16:34:55

标签: database tsql stored-procedures

我想编写一个TSQL存储过程,用于创建具有指定名称的数据库,并使用某种模式预先填充它。

所以我使用了很多EXEC语句:

EXEC('CREATE TABLE ' + @dbName + '.dbo.MyTable (...)');

等,以及一些CREATE PROCEDURECREATE FUNCTION等。但问题来自于我想创建一个类型,因为CREATE TYPE语句不能指定数据库,你可以在存储过程中没有USE @dbName

如何在存储过程中的另一个数据库中创建一个类型?

3 个答案:

答案 0 :(得分:6)

某些命令无法用作ssarabando建议,其中包括CREATE SCHEMA,当使用该技术时会抛出Msg 111

解决方法是嵌套动态SQL块,如下所示:

exec('use tempdb; exec sp_executesql N''create schema test'' ')

除了更改数据库之外,外部块不执行任何操作,因此内部块在执行时具有正确的上下文。

请注意,sp_executesql的内部参数需要两个单引号。

答案 1 :(得分:-1)

您可能需要查看sp_addtype。您可以在所需的数据库中执行此操作。

答案 2 :(得分:-1)

你也可以使用它,例如:

EXEC('use ' + @dbName + ';create type somename from int not null;')

在创建类型之前,它将选择正确的数据库。