首页 > 解决方案 > 如何在存储过程中调用创建数据库?

问题描述

到目前为止我有以下代码

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 ?

标签: sqlsql-server

解决方案


查看CREATE DATABASE语句的语法,我认为您不能在那里使用变量作为数据库名称。它必须是文字。

此外,它很可能需要在自己的批次中。

因此,您可以构建动态 SQL 语句并通过EXEC或运行它sp_executesql


推荐阅读