我正在尝试通过将参数值传递给数据库名称来创建新数据库
ALTER PROCEDURE [dbo].[p_dbCreation] @dbname nvarchar(30)
AS
CREATE DATABASE [@dbname] (EDITION = 'Standard', SERVICE_OBJECTIVE = ELASTIC_POOL (name = [xxx]), MAXSIZE = 250 GB) WITH CATALOG_COLLATION = SQL_Latin1_General_CP1_CI_AS;
但是我的数据库正在使用名称@dbname而不是我传递的值来创建
您不能使用变量来替换文字。CREATE DATABASE [@dbname];
字面上的意思是用名称创建数据库@dbname
,而不是用@dbname
。就像您不会期望SELECT '@dbname'
从内部返回值@dbname
而是返回文字值一样'@dbname'
。
唯一的方法是使用动态SQL,但是,我个人建议,如果您有这种要求,则存在设计缺陷。
CREATE OR ALTER PROCEDURE [dbo].[p_dbCreation] @dbname sysname AS --sysname is the correct data type for an object name
BEGIN
DECLARE @SQL nvarchar(MAX);
SET @SQL = N'CREATE DATABASE ' + QUOTENAME(@dbname) + N' (EDITION = ''Standard'', SERVICE_OBJECTIVE = ELASTIC_POOL (name = [xxx]), MAXSIZE = 250 GB) WITH CATALOG_COLLATION = SQL_Latin1_General_CP1_CI_AS;';
EXEC sys.sp_executesql @SQL;
END;
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句