我正在尝试找出使用不同参数运行多次查询的最佳方法。我已经尝试将它作为存储过程并使用游标运行它,但我对光标概念很新手。这是查询和我第一次使用光标。
SELECT
AVG([processingseconds])
FROM [nucor_historical_data].[dbo].[test_Lift_Matrix]
Where ActualGauge between 0 and .21875 and ActualWidth between 0 and 55
and inches between 0 and 120 and MaxLiftWeight between 0 and 10000 and
processingseconds is not null
所以我需要循环的参数在where语句中。我在另一个表格中看到了所有这些分组的组合。
有人建议我早些时候从另一个堆栈问题尝试这个,所以我测试了一个参数,但无法让它工作。有没有更好的方法来尝试这个?DECLARE @param varchar(200)
-- getting your parameter from the table
DECLARE curs CURSOR LOCAL FAST_FORWARD FOR
SELECT gauge FROM groupings
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 group_average @param
FETCH NEXT FROM curs INTO @param
END
CLOSE curs
DEALLOCATE curs
答案 0 :(得分:4)
存储过程就是这里的方法 - 将参数作为参数传递。
答案 1 :(得分:0)
以下是您尝试执行的操作的淡化示例,即使用另一个表中的值作为输入重复运行select语句。您需要适应您的具体情况,我只做了一部分字段:
DECLARE @UniqueId int
DECLARE @AgMin numeric(10,4)
DECLARE @AgMax numeric(10,4)
DECLARE @tmp TABLE (UniqueId INT, AgMin numeric(10,4), AgMax numeric(10,4))
INSERT @tmp SELECT ID, AGMIN, AGMAX FROM [YOUROTHERTABLEWITHTHESENUMBERS]
SELECT TOP 1 @UniueId=UniqueId, @AGMin=AGMin, @AGMAX=AgMax FROM @tmp
WHILE (@@rowcount > 0)
BEGIN
SELECT AVG([processingseconds]) FROM test_Lift_Matrix Where ActualGauge between @AGMIN and @AGMAX (the rest of your conditions...)
DELETE FROM @tmp WHERE UniqueId=@UniqueId
SELECT TOP 1 @UniqueId=UniqueId, @AGMin=AGMin, @AGMAX=AgMax FROM @tmp
END
答案 2 :(得分:0)
我认为你要做的是执行动态查询(因为更改了where子句),使其行为像静态查询一样。
我认为您的查询是根据来自客户端应用程序的标准执行的。
如果是这种情况,请尝试通过sp_executesql执行参数化的dinamic查询字符串。
这是一种非常有效的技术。请参阅以下内容: