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

the*_*oop 5 t-sql database stored-procedures

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

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

EXEC('CREATE TABLE ' + @dbName + '.dbo.MyTable (...)');
Run Code Online (Sandbox Code Playgroud)

等等,与一些一起CREATE PROCEDURE,CREATE FUNCTION等等.然而,问题来自于当我想创建一个类型,CREATE TYPE语句中指定的数据库不能有,你不能USE @dbName在存储过程中.

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

小智 7

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

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

exec('use tempdb; exec sp_executesql N''create schema test'' ')
Run Code Online (Sandbox Code Playgroud)

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

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


Dav*_*d M -1

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