Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 如何在存储过程中创建具有模式的新数据库?_Database_Tsql_Stored Procedures - Fatal编程技术网

Database 如何在存储过程中创建具有模式的新数据库?

Database 如何在存储过程中创建具有模式的新数据库?,database,tsql,stored-procedures,Database,Tsql,Stored Procedures,我想编写一个TSQL存储过程,用指定的名称创建一个数据库,并用一些模式预先填充它 所以我使用了很多EXEC语句: EXEC('CREATE TABLE ' + @dbName + '.dbo.MyTable (...)'); 等等,以及一些CREATE PROCEDURE,CREATE FUNCTION等等。但是,问题来自于我想创建类型的时候,因为CREATE type语句不能指定数据库,也不能在存储过程中使用USE@dbName 如何在存储过程的另一个数据库中创建类型?您可能需要看一下。您可

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

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

EXEC('CREATE TABLE ' + @dbName + '.dbo.MyTable (...)');
等等,以及一些
CREATE PROCEDURE
CREATE FUNCTION
等等。但是,问题来自于我想创建类型的时候,因为CREATE type语句不能指定数据库,也不能在存储过程中使用
USE@dbName


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

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

您也可以使用此操作,例如:

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

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

有些命令不能按建议使用,其中包括CREATE SCHEMA,当与该技术一起使用时抛出

解决方法是按如下方式嵌套动态SQL块:

exec('use tempdb; exec sp_executesql N''create schema test'' ')
外部块除了更改数据库之外什么都不做,这样内部块在执行时就具有正确的上下文


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

为什么要在存储的进程中创建数据库和架构???这似乎有点奇怪-通常情况下,DML语句不应该从存储过程中执行-您只需执行这些语句一次即可设置环境,然后就可以完成了..我想根据应用程序的输入创建任意数量的数据库(每个客户一个数据库)创建数据库备份,然后,每次你想添加一个新的逻辑名和文件名时,用一个新的逻辑名和文件名来还原它。我个人会找到另一种方法来配置数据库及其模式—类似于生成(并可能执行)必要的T-SQL脚本的工具—但我不会在存储过程中这样做。。。