目前我的代码是这样的。
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)
最佳答案
是的,您可以将结果存储在变量中并在以后多次重复使用。在您的情况下,它将是 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
表,以便使用并行执行计划。
关于sql - 将 MS Sql 结果设置为变量并重用它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30432402/