如何在循环中重复执行一个存储过程?
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 语句。
- 在您最喜欢的电子表格应用中打开您的 CSV。假设您的数据位于 A 列并从第 1 行 (A1)
开始
- 在 B1 中输入一个公式,该公式将为 A1 中的 ID 生成您的 EXEC。对于 Excel 那将是
="EXEC dbo.MyStoredProcedure @Id=" & A1
- 为 Col A 中有值的每一行复制 B1。您现在在 Col B 中为每个 ID 都有一个 EXEC 语句
- 从列 B 复制值并粘贴到 SSMS
假设我们有一个存储过程 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 语句。
- 在您最喜欢的电子表格应用中打开您的 CSV。假设您的数据位于 A 列并从第 1 行 (A1) 开始
- 在 B1 中输入一个公式,该公式将为 A1 中的 ID 生成您的 EXEC。对于 Excel 那将是
="EXEC dbo.MyStoredProcedure @Id=" & A1
- 为 Col A 中有值的每一行复制 B1。您现在在 Col B 中为每个 ID 都有一个 EXEC 语句
- 从列 B 复制值并粘贴到 SSMS