我在存储过程中有一个执行很多次的查询,所以它需要尽可能高效(这只是参数化查询的一个特定示例,例如):
select @resultOUT = count(*) from samples where <some criteria>
我的问题在于count(*)部分。我只需要知道表中是否有一行这样的行,据我所知,这个查询将扫描整个表(或索引)以计算匹配行的数量。
所以我需要的是Linq First()方法的sql等价物 - 即“找到第一个匹配的行,然后忘记其余的行。”
我该怎么做?我尝试过使用EXISTS关键字,并且一直遇到语法困难,例如
select @resultOUT = EXISTS (select somekeycolumn from samples where <somecriteria>)
描述了我想要的东西,但是不正确。
有人能让我走上正确的道路吗?
顺便说一下,我也需要为Oracle做类似的事情。
TIA
答案 0 :(得分:1)
使用EXISTS:
SELECT @resultOUT = CASE
WHEN EXISTS(select * from samples where <somecriteria>) THEN 1
ELSE 0
END
答案 1 :(得分:1)
Oracle略有不同:
SELECT CASE WHEN EXISTS ( SELECT 1 FROM samples WHERE <somecriteria> ) THEN 1 ELSE 0 END
INTO :result_out
FROM dual;