如何在 Transact-Sql 中模拟 Linq "First()" 函数
How to emulate the Linq "First()" function in Transact-Sql
我在存储过程中有一个查询,它执行了很多次,所以它需要尽可能高效(这只是参数化查询的一个具体示例,作为示例):
select @resultOUT = count(*) from samples where <some criteria>
我的问题是计数 (*) 部分。我只需要知道 table 中是否有这样的行,据我了解,此查询将扫描整个 table(或索引)以计算匹配行的数量。
所以我需要的是 Linq First() 方法的 sql 等价物 - 即 "find the first matching row and then forget about the rest."
我该怎么做?我已经尝试使用 EXISTS 关键字,并且我将 运行 保留为语法困难,例如
select @resultOUT = EXISTS (select somekeycolumn from samples where <somecriteria>)
描述了我想要的,但不正确。
谁能告诉我正确的道路?
顺便说一下,我也需要为 Oracle 做类似的事情。
TIA
有 EXISTS:
SELECT @resultOUT = CASE
WHEN EXISTS(select * from samples where <somecriteria>) THEN 1
ELSE 0
END
Oracle 会略有不同:
SELECT CASE WHEN EXISTS ( SELECT 1 FROM samples WHERE <somecriteria> ) THEN 1 ELSE 0 END
INTO :result_out
FROM dual;
我在存储过程中有一个查询,它执行了很多次,所以它需要尽可能高效(这只是参数化查询的一个具体示例,作为示例):
select @resultOUT = count(*) from samples where <some criteria>
我的问题是计数 (*) 部分。我只需要知道 table 中是否有这样的行,据我了解,此查询将扫描整个 table(或索引)以计算匹配行的数量。
所以我需要的是 Linq First() 方法的 sql 等价物 - 即 "find the first matching row and then forget about the rest."
我该怎么做?我已经尝试使用 EXISTS 关键字,并且我将 运行 保留为语法困难,例如
select @resultOUT = EXISTS (select somekeycolumn from samples where <somecriteria>)
描述了我想要的,但不正确。
谁能告诉我正确的道路?
顺便说一下,我也需要为 Oracle 做类似的事情。
TIA
有 EXISTS:
SELECT @resultOUT = CASE
WHEN EXISTS(select * from samples where <somecriteria>) THEN 1
ELSE 0
END
Oracle 会略有不同:
SELECT CASE WHEN EXISTS ( SELECT 1 FROM samples WHERE <somecriteria> ) THEN 1 ELSE 0 END
INTO :result_out
FROM dual;