一尘不染

将MS Sql结果设置为变量并重复使用

sql

目前,我的代码是这样的。

select * 
from tblReq 
where ReqID in (select ReqID from tblLog where LogDate >= '2015/04/01' and LogDate < '2015/05/31')

只是想知道数据库实际上如何找到此查询的结果?每次在子查询中运行时是否都会重新运行?是否有任何脚本可以在其中将结果列表存储在某个变量中并能够将其使用回去?(下面的代码)

select @logs = tblLog.ReqID from tblLog where tblLog.LogDate >= '2015/04/01' and tblLog.LogDate < '2015/05/31'  
select * from tblReq where ReqID in (@logs)

阅读 154

收藏
2021-05-30

共1个答案

一尘不染

是的,您可以将结果存储在变量中,并在以后多次重用。在您的情况下,它将是一个,table variable因为您可能有多个项目。然后,将其简化join为初始查询:

DECLARE @Logs TABLE
(
    [LogID] INT
);

INSERT INTO @Logs ([LogID])
Select tblLog.ReqID 
from tblLog 
where tblLog.LogDate >= '2015/04/01' 
    and tblLog.LogDate < '2015/05/31'

select * 
from tblReq A
INNER JOIN  @Logs L
    ON A.ReqID = L.LogID

另外,这可能会损害您的查询性能,因为表变量black box与查询优化器不同。如果要存储大量行,请改用temporary表,以便使用并行执行计划。

2021-05-30