【问题标题】:How can I create a new database with schema within a stored procedure?如何在存储过程中创建具有架构的新数据库?
【发布时间】:2012-01-10 16:34:54
【问题描述】:

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

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

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

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

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

【问题讨论】:

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

标签: database tsql stored-procedures


【解决方案1】:

有些命令不能像ssarabando 所建议的那样使用,其中包括 CREATE SCHEMA,当与该技术一起使用时会抛出 Msg 111

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

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

外部块除了更改数据库之外什么都不做,因此内部块在执行时具有正确的上下文。

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      你也可以使用这个,例如:

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

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

      【讨论】:

        猜你喜欢
        • 2011-03-18
        • 2013-06-05
        • 2017-10-16
        • 2011-03-07
        • 1970-01-01
        • 2011-10-16
        • 2016-11-20
        • 2022-09-30
        • 1970-01-01
        相关资源
        最近更新 更多