【发布时间】:2011-07-27 16:47:11
【问题描述】:
我有一个返回多列的存储过程。像 colA colB colC .... colL 我可以编写另一个查询来获取相同的列,但如果 colC/colB
【问题讨论】:
标签: sql
我有一个返回多列的存储过程。像 colA colB colC .... colL 我可以编写另一个查询来获取相同的列,但如果 colC/colB
【问题讨论】:
标签: sql
您需要使用表变量(@)或临时表(#),因为您不能直接从存储过程的结果集中选择:
DECLARE @table TABLE (colA int, colB int, colC int, ...)
INSERT INTO @table
EXEC StoreProcedureName
SELECT * FROM @table WHERE colC * 10 < colB
【讨论】:
我假设这里的问题是您无法使用内联 SELECT 语句获取存储过程的结果;正确的?换句话说,你希望能够说,
SELECT * FROM myProc WHERE (colcC / colB) < .1
但是那行不通,因为在这种情况下你不能把存储过程当作表来对待。
这个问题的最佳解决方案是创建一个新的存储过程,它做两件事:
1) 将过程的结果复制到临时表中,如下所示:
INSERT INTO #myTempTable EXEC myProcedure
2) 选择您感兴趣的行,如下所示:
SELECT * FROM #myTempTable WHERE (colC * 10) < colB
(借用了纳尼亚的 colC * 10 技巧。)
祝你好运!
【讨论】:
应该可以。我可能会建议添加这样的 WHERE 子句:
WHERE (colC * 10) < ColB
这会让你不必做百分比和其他事情。
您也可以只过滤代码中的结果。
顺便说一句...这就是我转换 colC/ColB
C/B < 10%
C/B < .1 (convert percentage to decimal)
C < .1B (multiply both sides by B)
10C < B (multiply both sides by 10)
您甚至可以编写新的存储过程来获取您想要返回的百分比金额的变量。然后 where 子句将是 WHERE (colC * @percentage)
【讨论】: