通过 sql 服务器中的游标从 table 中删除多条记录

Delete multiple records from table through cursor in sql server

我想通过系统定义的 sp

删除一些测试 IP

从 sys.firewall_rules table 在 sql 服务器中执行 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

它对我有用,您只需更改代码中的一些内容。

  1. 在 select 列表中包含 table ColumnName [name] 而不是变量 。您没有将任何值传递给变量,因此这给出了 NULL 结果。
  2. 执行时包含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,不在上面的删除列表中。