如何在调用sp_addextendedproperty时指定数据库名称?
显式指定数据库调用sp_addextendedproperty的方法
直接指定单个数据库
要显式指定目标数据库,只需在存储过程前加上数据库名称.sys.sp_addextendedproperty的三部分命名格式,修改后的执行语句如下:
EXEC Test.sys.sp_addextendedproperty @name=N'MS_Description', @value=N'The display order of the right', @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'_right', @level2type=N'COLUMN',@level2name=N'display_order'
将代码中的Test替换为实际需要操作的数据库名(比如Production)即可。
批量循环操作多个数据库
如果要批量对Test、Production等多个数据库执行该操作,推荐使用动态SQL结合循环实现,示例代码如下:
-- 定义需要操作的数据库列表 DECLARE @TargetDBs TABLE (DBName NVARCHAR(128)) INSERT INTO @TargetDBs VALUES ('Test'), ('Production') -- 声明变量存储当前数据库名和动态SQL语句 DECLARE @CurrentDB NVARCHAR(128), @ExecSQL NVARCHAR(MAX) -- 循环处理每个数据库 WHILE EXISTS(SELECT * FROM @TargetDBs) BEGIN SELECT TOP 1 @CurrentDB = DBName FROM @TargetDBs -- 拼接带数据库名的动态SQL,用QUOTENAME避免特殊字符导致语法错误 SET @ExecSQL = N'EXEC ' + QUOTENAME(@CurrentDB) + N'.sys.sp_addextendedproperty @name=N''MS_Description'', @value=N''The display order of the right'', @level0type=N''SCHEMA'',@level0name=N''dbo'', @level1type=N''TABLE'',@level1name=N''_right'', @level2type=N''COLUMN'',@level2name=N''display_order''' -- 执行动态SQL EXEC sp_executesql @ExecSQL -- 移除已处理的数据库,避免重复执行 DELETE FROM @TargetDBs WHERE DBName = @CurrentDB END
注意:执行前需确保当前登录账号对所有目标数据库拥有ALTER ANY EXTENDED PROPERTY权限,且目标数据库中存在对应的dbo._right表和display_order列,否则会执行失败。
内容的提问来源于stack exchange,提问作者Doe
相关产品推荐
相关产品推荐

