我可以搜索存储过程结果吗?

问题描述 投票:0回答:6

假设我有一个返回大量数据的存储过程。我可以编写另一个查询来过滤存储过程的结果吗?

例如:

select * from
EXEC xp_readerrorlog
where LogDate = '2011-02-15'
sql sql-server-2005 stored-procedures
6个回答
17
投票

您需要首先将存储过程的结果插入表中,然后查询这些结果。

create table #result (LogDate datetime, ProcessInfo varchar(20),Text text)

INSERT INTO #Result
EXEC xp_readerrorlog

SELECT *
FROM #Result
WHERE datepart(yy,LogDate) = '2012'

1
投票

您不能将其作为查询的一部分,但您可以将结果数据插入到临时表或表变量中,然后将其用于查询。


1
投票

仅返回一整天的错误日志会使结果更有用吗?我认为它仍然会充满无用的条目。如果您正在查找特定事件,为什么不使用 xp_readerrorlog 的过滤器参数之一?以下将返回当前日志中包含字符串“fail”的所有行:

EXEC xp_readerrorlog 0, 1, 'fail';

1
投票

这在 SQL Server 中无法完成,除非您创建包含所有列和列数据类型的临时表 如果您处理大量列并且您不知道该表,但您只需要几列并过滤结果,这可能会很烦人 所以我找到了使用 MS Access 的解决方法,您可以在 MS Access 中创建传递查询 请参阅:https://support.microsoft.com/en-us/office/create-a-pass-through-query-b775ac23-8a6b-49b2-82e2-6dac62532a42 在那里你可以只传递

EXEC xp_readerrorlog
并将传递查询命名为 Q_readerrorlog 然后您可以使用 SQL 在 MS Access 中创建另一个本地查询:as

select * from
Q_readerrorlog
where LogDate = '2011-02-15'

0
投票

您可以将 sp 的输出复制到临时表。

insert into #temp
EXEC xp_readerrorlog

然后对临时表使用 where 子句


0
投票

或者你可以创建一个表值函数

© www.soinside.com 2019 - 2024. All rights reserved.