You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在调用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 18:42:05