我正在使用SQL Server 2008 R2
我只想测试表中是否存在某些内容
IF EXISTS (SELECT * FROM ta WHERE ca = 'abc') PRINT 'YES'
IF EXISTS (SELECT ca FROM ta WHERE ca = 'abc') PRINT 'YES'
IF EXISTS (SELECT 1 FROM ta WHERE ca = 'abc') PRINT 'YES'
IF EXISTS (SELECT (1) FROM ta WHERE ca = 'abc') PRINT 'YES'
IF EXISTS (SELECT TOP 1 1 FROM ta WHERE ca = 'abc') PRINT 'YES'
他们在结果/副作用/表现上有任何差异(无论多小)?
谢谢
答案 0 :(得分:6)
绝对没有区别 - IF EXISTS(...)
只会根据语句中的WHERE
子句检查是否存在行。
声明中的其他所有内容都无关紧要 - 无论您使用SELECT *
还是SELECT 1
还是SELECT TOP 1 *
,都没有任何区别。即使使用SELECT * ....
, NOT 也会从表中选择所有列 - 它只会根据WHERE
子句检查数据是否存在。
所有五个查询都完全相同的执行计划
答案 1 :(得分:3)
没有区别,执行计划似乎是一样的。