【问题标题】:Executing a SQL Query multiple times with different parameters使用不同的参数多次执行 SQL 查询
【发布时间】:2012-03-23 07:43:05
【问题描述】:

我有一个 SQL 存储过程,我需要使用不同的参数执行多次。是否可以执行某种 SQL 脚本,该脚本将使用数组或其他不同参数的数据结构多次执行?对此有什么想法吗?

【问题讨论】:

  • 参数从哪里来?数据库表?
  • 是的。表中的特定列不少于。
  • 可以循环遍历表中列的值并将它们用作存储过程调用中的参数。但是,这可能会很慢。有时最好(如果可能的话)将存储过程重写为非过程 SQL。当然,您还没有展示您的代码,因此不可能说出最适合您的情况。

标签: sql-server sql-scripts


【解决方案1】:

您可以使用光标(但如果可以重构您的代码,请尝试YS's answer):

编辑:根据@YS 的建议添加了 FAST_FORWARD

DECLARE @param INT

-- getting your parameter from the table
DECLARE curs CURSOR LOCAL FAST_FORWARD FOR
    SELECT afield FROM atable WHERE ...

OPEN curs

FETCH NEXT FROM curs INTO @param

-- executing your stored procedure once for every value of your parameter     
WHILE @@FETCH_STATUS = 0 BEGIN
    EXEC usp_stored_Procedure @param
    FETCH NEXT FROM curs INTO @param
END

CLOSE curs
DEALLOCATE curs

【讨论】:

  • 考虑使用FAST_FORWARD 来增加性能,如果光标是只读的并且你只是向前移动。即:DECLARE curs CURSOR LOCAL FAST_FORWARD FOR...
【解决方案2】:

我可能会稍微调整设计以适应需要(解决光标问题) - 即:

  • 将要在存储过程中执行的值插入到临时表中,然后调用存储过程(存储过程将读取临时表)

  • 使用表值参数调用存储过程

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-28
    • 1970-01-01
    • 1970-01-01
    • 2013-05-14
    • 1970-01-01
    • 2020-12-01
    相关资源
    最近更新 更多