sql - 如何在存储过程中调用创建数据库?
问题描述
到目前为止我有以下代码
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[MyDB]') AND type in (N'P', N'PC'))
DROP PROCEDURE MyDB
GO
CREATE PROCEDURE MyDB
@newname NVARCHAR(100)
AS
BEGIN
IF DB_ID (N'@newname') IS NULL
CREATE DATABASE @newname
COLLATE SQL_Latin1_General_CP1_CI_AS
END
GO
为什么 CREATE DATABASE @newname 行有错误。它说语法不正确,期望 audit_specification, db_scoped_credential ?
解决方案
查看CREATE DATABASE
语句的语法,我认为您不能在那里使用变量作为数据库名称。它必须是文字。
此外,它很可能需要在自己的批次中。
因此,您可以构建动态 SQL 语句并通过EXEC
或运行它sp_executesql
。
推荐阅读
- c# - 使用公钥或验证的 RSA 解码
- swift - 如何知道在 Swift 中的 didFinishPickingMediaWithInfo 之前在 photoLibrary 中选择的媒体类型?
- xml - XSD 是唯一的,带有多个参数的 keyref
- angular5 - Angular 5 数据表不进行 ajax 调用
- javascript - 如何在 PHP 中的 HTML 中的 Javascript 中插入 PHP?
- javascript - 单元测试调用外部 api 的 node.js 控制器
- time - 系统中的 Simulink/Simevents 实体时间
- java - Springframework 无法读取 http 帖子
- c# - 为什么我们在表上获得 FOREIGN KEY 约束可能会导致 LocalDB 上的循环或多个级联路径而不是 SQL Server Express
- html - 如何在angular2中将Base64解码为图像