如何在Transact-Sql中模拟Linq“First()”函数

如何在Transact-Sql中模拟Linq“First()”函数,sql,oracle,tsql,plsql,Sql,Oracle,Tsql,Plsql,我在一个存储过程中有一个查询,它被执行了很多次,因此它需要尽可能高效。这只是参数化查询的一个具体示例,举个例子: select @resultOUT = count(*) from samples where <some criteria> 我的问题是计数*部分。我只需要知道表中是否有这样一行,据我所知,这个查询将扫描整个表或索引,以计算匹配行的数量 因此,我需要的是一个与Linq First方法相当的sql—即找到第一个匹配行,然后忘掉其余的行 我该怎么做呢?我尝试过使用EXI

我在一个存储过程中有一个查询,它被执行了很多次,因此它需要尽可能高效。这只是参数化查询的一个具体示例,举个例子:

select @resultOUT = count(*) from samples where  <some criteria>
我的问题是计数*部分。我只需要知道表中是否有这样一行,据我所知,这个查询将扫描整个表或索引,以计算匹配行的数量

因此,我需要的是一个与Linq First方法相当的sql—即找到第一个匹配行,然后忘掉其余的行

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

   select @resultOUT = EXISTS (select somekeycolumn from samples where <somecriteria>)
这描述了我想要的,但不正确

谁能让我走上正确的道路

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

TIA

存在:

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;

谢谢,但是你能告诉我为什么这个不能编译吗?使用varSampleCode,varResult,执行立即“存在时选择大小写从样本中选择1,其中samplecode=:samplecode和auditflag=0和“| | varFilterString | | |”,然后执行1,否则0结束为:varResult from DUAL”;假设所有变量都已声明,并且查询本身是有意义的。@NeilHaughton,我不确定为什么不能编译,但这听起来像是OP中的一个单独问题。这不是第二个问题,因为我问的是为什么建议的答案不能编译。无论如何,我确实发布了第二个问题,这给了我答案。@NeilHaughton,你是说我的答案不正确吗?因为我的回答和你在评论中发布的没有编译的内容有很大的不同。不,我是在问为什么我使用你建议的内容没有编译我的帖子5 Feb 12:15UCT,这是在执行直接命令中使用你的建议。