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

SQL Server使用游标调用sp_delete_firewall_rule批量删除测试IP规则失败问题

问题根因
  • 核心错误出在游标的查询语句:原代码中写的是select @name from sys.firewall_rules where [name] like '%TestIP%',此处查询的是未初始化的变量@name,而非sys.firewall_rules表中存储的name字段值,导致游标遍历拿到的所有值都是NULL,调用sp_delete_firewall_rule传入空参数无法匹配到对应规则,执行无效果。
  • 额外可优化点:sys.firewall_rules的name字段原生类型为nvarchar(128),无需声明为nvarchar(max),类型匹配可避免潜在异常。
修正后批量删除代码
declare @name nvarchar(128)

declare cur CURSOR LOCAL for
-- 此处查询表的name字段,而非变量@name
select name from sys.firewall_rules where [name] like '%TestIP%'

open cur
fetch next from cur into @name

while @@FETCH_STATUS = 0 BEGIN
    exec sp_delete_firewall_rule @name
    fetch next from cur into @name
END

close cur
deallocate cur
操作建议
  • 执行删除前可先单独运行查询语句select name from sys.firewall_rules where [name] like '%TestIP%',确认待删除的规则列表,避免误删正常规则。
  • 可在exec语句前增加print N'正在删除规则:' + @name,执行时可直观看到当前处理的规则,方便问题排查。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 19:09:03