0

如果我有一个返回结果表的 SQL SERVER 2008 存储过程,是否可以在WHERE不编辑存储过程本身的情况下对结果表运行子句?

4

4 回答 4

4

不是直接的。

将输出重定向到临时表。从中选择并过滤

CREATE TABLE #foo (...)

INSERT #foo EXEC bar @p1

SELECT * FROM @foo WHERE ...
于 2012-08-27T13:14:14.927 回答
0

我建议创建一个#temp 表以将存储过程的结果插入到该表中,然后使用该WHERE子句从中进行选择。

于 2012-08-27T13:15:12.353 回答
0

您可以使用表值函数,并将其与此处的其他答案结合起来......即:创建一个 TVF,它创建一个连接本地临时表,用存储过程调用的结果填充该表并返回结果. 然后,您可以SELECT从该 TVF 应用所需的WHERE子句。

但是,对于大型数据集,这可能会非常慢!!

于 2012-08-27T13:20:41.597 回答
0

Openrowset 是我想到的一个选项,它的工作原理是这样的

SELECT  *
FROM    OPENROWSET ('SQLOLEDB','Server=(local);TRUSTED_CONNECTION=YES;','set fmtonly off      exec master.dbo.sp_who')
AS tbl

您可以直接应用 where 子句。

于 2012-08-27T13:42:42.967 回答