如何模仿Linq" First()" Transact-Sql中的函数

时间:2015-02-04 11:35:13

标签: sql oracle tsql plsql

我在存储过程中有一个执行很多次的查询,所以它需要尽可能高效(这只是参数化查询的一个特定示例,例如):

select @resultOUT = count(*) from samples where  <some criteria>

我的问题在于count(*)部分。我只需要知道表中是否有一行这样的行,据我所知,这个查询将扫描整个表(或索引)以计算匹配行的数量。

所以我需要的是Linq First()方法的sql等价物 - 即“找到第一个匹配的行,然后忘记其余的行。”

我该怎么做?我尝试过使用EXISTS关键字,并且一直遇到语法困难,例如

   select @resultOUT = EXISTS (select somekeycolumn from samples where <somecriteria>)

描述了我想要的东西,但是不正确。

有人能让我走上正确的道路吗?

顺便说一下,我也需要为Oracle做类似的事情。

TIA

2 个答案:

答案 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;