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

在其他数据库添加扩展属性时EXEC执行动态SQL失败求助

问题解决思路

错误原因

你遇到的问题源于exec @my_sql的用法错误:SQL Server中,当EXEC直接跟变量时,会将变量的完整内容视为单个存储过程名称,而非要执行的SQL语句块。因此它会尝试查找名为HPAdmin.sys.sp_addextendedproperty @name = 'pf_backup', @value = 'SQL07|HPAdmin|2025-07-21 14:56';的存储过程,自然无法找到。

解决方法

有两种正确的方式执行这段动态SQL:

  1. 给变量添加括号,使用EXEC()语法
    把变量放在括号里,SQL Server就会将其解析为要执行的SQL语句:

    declare @my_sql nvarchar(4000) = 'HPAdmin.sys.sp_addextendedproperty @name = ''pf_backup'', @value = ''SQL07|HPAdmin|2025-07-21 14:56'';'
    EXEC(@my_sql);
    
  2. 使用sp_executesql(推荐)
    这是SQL Server官方推荐的动态SQL执行方式,支持参数化,能避免SQL注入风险,也更易维护。如果你的参数需要动态生成,这种写法更灵活:

    -- 定义带参数占位符的动态SQL模板
    declare @my_sql nvarchar(4000) = N'HPAdmin.sys.sp_addextendedproperty @name = @prop_name, @value = @prop_value;';
    -- 定义参数值
    declare @prop_name sysname = N'pf_backup';
    declare @prop_value nvarchar(100) = N'SQL07|HPAdmin|2025-07-21 14:56';
    -- 传入参数并执行动态SQL
    exec sp_executesql @my_sql, N'@prop_name sysname, @prop_value nvarchar(100)', @prop_name, @prop_value;
    

内容的提问来源于stack exchange,提问作者lcarpay

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 15:42:11