sql - 通过sql server中的游标从表中删除多条记录
问题描述
我想通过系统定义的 sp 删除许多测试 IP
从 sql server 中的 sys.firewall_rules 表中执行 sp_delete_firewall_rule
我正在使用光标下方,但它不起作用
declare @name nvarchar(max)
declare cur CURSOR LOCAL for
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
解决方案
它对我有用,您只需要更改代码中的一些内容。
- 在选择列表中包括表ColumnName [name] 而不是 variable。您没有将任何值传递给变量,因此这给出了 NULL 结果。
- 执行时包含 SP 参数
exec sp_delete_firewall_rule @name = @name1;
我的防火墙规则中有这些 IP:
使用下面的代码,我将删除名称类似于TestIP1的 IP 。
DECLARE @name1 nvarchar(128);
DECLARE MyCursor CURSOR FOR
SELECT [name] from sys.firewall_rules where [name] like '%TestIP1%';
OPEN MyCursor;
FETCH FROM MyCursor into @name1
WHILE @@FETCH_STATUS = 0 BEGIN
EXEC sp_delete_firewall_rule @name = @name1 ;
FETCH next from MyCursor into @name1
END
CLOSE MyCursor;
DEALLOCATE MyCursor;
GO
现在结果显示只有 1 个 IP 未包含在上述删除列表中。