【问题标题】:Delete multiple records from table through cursor in sql server通过sql server中的游标从表中删除多条记录
【发布时间】:2021-11-23 04:10:54
【问题描述】:

我想通过系统定义的 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

【问题讨论】:

  • 从 sys.firewall_rules 中选择名称... vs.. 从 sys.firewall_rules 中选择 **@**name
  • @lptr 它仍然无法正常工作
  • 是否有任何其他选项可用于使用 sp_delete_firewall_rule 动态删除所有记录
  • 你检查过sp_delete_firewall_rule的权限了吗? ..docs.microsoft.com/en-us/sql/relational-databases/…
  • .. 您可以通过将 exec sp_delete_firewall_rule @name... 更改为 ... select @name 来检查代码是否会遍历规则集

标签: sql sql-server sql-server-2008 azure-sql-database cursors


【解决方案1】:

它对我有用,您只需要更改代码中的几处即可。

  1. 在选择列表中包含表 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 不在上述删除列表中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-01
    • 2011-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多