首页 > 解决方案 > 通过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

标签: sqlsql-serversql-server-2008azure-sql-databasecursors

解决方案


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

  1. 在选择列表中包括表ColumnName [name] 而不是 variable。您没有将任何值传递给变量,因此这给出了 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 未包含在上述删除列表中。

在此处输入图像描述


推荐阅读