假设我有一个返回大量数据的存储过程。我可以编写另一个查询来过滤存储过程的结果吗?
例如:
select * from
EXEC xp_readerrorlog
where LogDate = '2011-02-15'
您需要首先将存储过程的结果插入表中,然后查询这些结果。
create table #result (LogDate datetime, ProcessInfo varchar(20),Text text)
INSERT INTO #Result
EXEC xp_readerrorlog
SELECT *
FROM #Result
WHERE datepart(yy,LogDate) = '2012'
您不能将其作为查询的一部分,但您可以将结果数据插入到临时表或表变量中,然后将其用于查询。
仅返回一整天的错误日志会使结果更有用吗?我认为它仍然会充满无用的条目。如果您正在查找特定事件,为什么不使用 xp_readerrorlog 的过滤器参数之一?以下将返回当前日志中包含字符串“fail”的所有行:
EXEC xp_readerrorlog 0, 1, 'fail';
这在 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'
您可以将 sp 的输出复制到临时表。
insert into #temp
EXEC xp_readerrorlog
然后对临时表使用 where 子句
或者你可以创建一个表值函数