如何在循环中重复执行一个存储过程?

How to repeatedly execute a stored procedure in a loop?

假设我们有一个存储过程 dbo.MyStoredProcedure,它将 @Id 作为参数,然后执行一些操作。

我有一个包含 1000 多行不同 ID 的 CSV。如何以最好和最简单的方式为我的 CSV 文件中的每个 ID 执行 dbo.MyStoredProcedure

我不是特别想复制这个查询:

EXEC dbo.MyStoredProcedure @Id: 75627

对于 CSV 中的每一行...

你应该像 @larnu 在评论中提到的那样理想地工作。但是,如果你不能改变 proc 你有点卡住了......

如果您可以将 CSV 文件导入 table,则可以使用 CURSOR。请注意在 SQL 服务器中循环 几乎总是不是最佳解决方案 .

的强制性警告
Declare @id INT;

DECLARE IDS CURSOR FOR
SELECT id FROM IdTable;

FETCH NEXT FROM IDS INTO @id;

WHILE @@FETCH_STATUS = 0
BEGIN
    EXEC dbo.MyStoredProcedure @Id = @id;
    FETCH NEXT FROM IDS INTO @id;
END;

CLOSE IDS;
DEALLOCATE IDS;

另一种方法是为电子表格(Excel、Google 表格等)中的每个 ID 生成一个 EXEC 语句。

  1. 在您最喜欢的电子表格应用中打开您的 CSV。假设您的数据位于 A 列并从第 1 行 (A1)
  2. 开始
  3. 在 B1 中输入一个公式,该公式将为 A1 中的 ID 生成您的 EXEC。对于 Excel 那将是 ="EXEC dbo.MyStoredProcedure @Id=" & A1
  4. 为 Col A 中有值的每一行复制 B1。您现在在 Col B 中为每个 ID 都有一个 EXEC 语句
  5. 从列 B 复制值并粘贴到 SSMS