如果我有一个返回结果表的SQL SERVER 2008存储过程,是否可以在不编辑存储过程本身的情况下对结果表运行WHERE
子句?
答案 0 :(得分:4)
不直接。
将输出重定向到临时表。从中选择并过滤
CREATE TABLE #foo (...)
INSERT #foo EXEC bar @p1
SELECT * FROM @foo WHERE ...
答案 1 :(得分:0)
我建议创建一个#temp表,将存储过程的结果插入到WHERE
子句中,然后从中选择。
答案 2 :(得分:0)
您可以使用表值函数,并将其与其他答案结合起来...即:创建一个创建连接本地临时表的TVF,使用存储过程调用的结果填充该表,返回结果。然后,您可以使用所需的SELECT
条款从该TVF执行WHERE
。
但是,对于大型数据集,这可能会非常慢!!
答案 3 :(得分:0)
例如,您可以检查此link以使用带有存储过程的dynamic where子句。我希望我能正确理解你的问题,然后这个链接可以帮助你。
可能对您有所帮助的链接:
http://www.sqlteam.com/article/implementing-a-dynamic-where-clause
答案 4 :(得分:0)
Openrowset是一个我想到的选项,就像这样
SELECT *
FROM OPENROWSET ('SQLOLEDB','Server=(local);TRUSTED_CONNECTION=YES;','set fmtonly off exec master.dbo.sp_who')
AS tbl
您可以直接申请where子句。