【问题标题】:Querying against result of EXEC查询执行结果
【发布时间】:2020-11-02 06:37:48
【问题描述】:

我的执行官:

SET @Sql = "SELECT r.Id FROM Record r where r.Price > 100"

如何查询@Sql 的结果?理想情况下是这样的:

SELECT * FROM Record r JOIN Patient p 
ON r.Id = p.recordId 
WHERE r.Id IN (EXEC(@Sql))

【问题讨论】:

  • 您使用动态查询的实际目的是什么?
  • 有很多条件 WHERE 子句。别看例子,我的真实代码大概有15-20个WHERE子句,都是有条件的
  • 但这如何证明使用动态查询的合理性?您的查询真的需要动态查询吗?
  • 我不知道,我不是写原始查询的人。我猜原作者想要做的是:如果 @param1 > 10,添加这个 WHERE 子句,否则不要打扰。如果我知道怎么做,我可以尝试将其转换为普通查询。我很少需要接触存储的 proc 代码,所以我对此很陌生。
  • 既然您使用的是动态查询,为什么不直接使用动态sql 形成完整的查询呢?而不是使用临时表来存储中间结果以供后续查询

标签: sql sql-server tsql dynamic-sql


【解决方案1】:

也许是这样的:

SET @Sql = 'SELECT r.Id FROM Record r where r.Price > 100'

CREATE TABLE #DataSource 
(
    [ID] INT
);

INSERT INTO #DataSource ([ID])
EXEC(@SQL);

SELECT * 
FROM Record r 
JOIN Patient p 
    ON r.Id = p.recordId 
WHERE r.Id IN (SELECT [ID] FROM #DataSource);

【讨论】: