如何运行where子句到存储过程而不在SQL Server中编辑它?

时间:2012-08-27 13:11:45

标签: sql-server sql-server-2008

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

5 个答案:

答案 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

Passing SQL stored procedure entirety of WHERE clause

http://msdn.microsoft.com/en-us/library/ms188332.aspx

答案 4 :(得分:0)

Openrowset是一个我想到的选项,就像这样

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

您可以直接申请where子句。