sql-server - 如何在过程中添加 CREATE DATABASE 和 CREATE SCHEMA?

标签 sql-server sql-server-2012

尝试让这项工作成功:

CREATE PROCEDURE createDbandSchema AS
BEGIN
    CREATE DATABASE MYDB
    USE MYDB
    CREATE SCHEMA MYSCHEMA
END

我遇到错误

a USE database statement is not allowed in a procedure, function or trigger.

最佳答案

create schema 语句必须是批处理中的第一个语句,因此它需要嵌套范围。外部范围更改为新数据库。内部作用域将 create schema 作为批处理的第一个语句运行:

create procedure createDbandSchema(@db sysname, @schema sysname)
as begin
    declare @sql nvarchar(max) = N'CREATE DATABASE ' + quotename(@db);
    exec (@sql)
    set @sql = N'USE ' + quotename(@db) + '; exec (N''CREATE SCHEMA ' +
        quotename(@schema) + N''')';
    exec (@sql)
end

关于sql-server - 如何在过程中添加 CREATE DATABASE 和 CREATE SCHEMA?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31469116/

相关文章:

mysql - SQL 左连接条件

mysql - MS SQL 触发器用于将旧数据保存到更新中的另一个表

sql - sql server 中的新行

sql - 使用带有条件逻辑的 T-SQL 来覆盖 SQL Server View 中使用的列值

sql-server - 如何在一个查询中使用 EXISTS 和 NOT EXISTS?

sql - 如何在sql参数前设置N前缀

sql-server - 如何进行单个查询

sql-server - 同时使用可序列化和快照隔离的含义

sql-server - 使用 SQL Server 中的函数插入/更新/删除

SQL Server - 在联接中正确分组