sql - 将 MS Sql 结果设置为变量并重用它

标签 sql sql-server tsql

目前我的代码是这样的。

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/

相关文章:

sql - 如何将 SQL 查询的 xml 输出转换为 varchar 输出

sql - 如果您不在事务中,SET XACT_ABORT ON 是否会在存储过程中执行任何操作?

mysql - 浮点不准确的情况

sql - 使用一个 SQL 查询的结果来查找另一表的结果?

sql-server - 使用try catch回滚的T-SQL错误处理,错误行已删除

tsql - 使用 SQL INSERT 创建带有 FileTable 的目录

sql - 如何在 DB2 iSeries 中的现有列中添加非空约束?

php - 如何追踪用户去过哪里? (数据库)

sql-server - 请解释一下 PIVOT 的组成部分

sql - t-sql 递归查询