我想编写一个TSQL存储过程,用于创建具有指定名称的数据库,并使用某种模式预先填充它。
所以我使用了很多EXEC语句:
EXEC('CREATE TABLE ' + @dbName + '.dbo.MyTable (...)');
等,以及一些CREATE PROCEDURE
,CREATE FUNCTION
等。但问题来自于我想创建一个类型,因为CREATE TYPE语句不能指定数据库,你可以在存储过程中没有USE @dbName
。
如何在存储过程中的另一个数据库中创建一个类型?
答案 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;')
在创建类型之前,它将选择正确的数据库。