我有一个返回多列的存储过程。像colA colB colC .... colL 我可以编写另一个查询来获取相同的列,但是如果colC / colB&lt; 10%,即WHERE过滤10%。基本上应该显示存储过程返回的相同列,但现在只有colC / colB应该<10%。我无法修改存储过程,因为它在另一个应用程序中使用,我只是从中获取值。
答案 0 :(得分:1)
那应该有用。我可能会建议像这样添加一个WHERE子句:
WHERE (colC * 10) < ColB
这会阻止你做百分比和事情。
您可能只是在代码中过滤结果。
BTW ......这就是我改变colC / ColB&lt;的方法。 10%:
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)&lt; COLB
答案 1 :(得分:1)
我假设这里的问题是您无法使用内联SELECT语句获取存储过程的结果;正确?换句话说,你希望能够说,
SELECT * FROM myProc WHERE (colcC / colB) < .1
但不起作用,因为你不能在这种情况下处理像表这样的存储过程。
解决此问题的最佳方法是创建一个执行两项操作的新存储过程:
1)将过程的结果复制到临时表中,如下所示:
INSERT INTO #myTempTable EXEC myProcedure
2)选择您感兴趣的行,如下所示:
SELECT * FROM #myTempTable WHERE (colC * 10) < colB
(借用纳尼安的colC * 10技巧。)
祝你好运!答案 2 :(得分:1)
您需要使用表变量(@)或临时表(#),因为您无法直接从存储过程的结果集中进行选择:
DECLARE @table TABLE (colA int, colB int, colC int, ...)
INSERT INTO @table
EXEC StoreProcedureName
SELECT * FROM @table WHERE colC * 10 < colB