检查表是否包含行sql server 2005

问题描述 投票:53回答:6

如何检查表是否包含行sql server 2005?

sql-server-2005
6个回答
93
投票

出于什么目的?

  • 最快的IF将是IF EXISTS (SELECT * FROM Table)...
  • 对于结果集,SELECT TOP 1 1 FROM Table返回零行或一行
  • 对于一个具有计数(0或非零)的行,SELECT COUNT(*) FROM Table

35
投票

此外,您可以使用exists

select case when exists (select 1 from table) 
          then 'contains rows' 
          else 'doesnt contain rows' 
       end

或检查特定记录是否有子行:

select * from Table t1
where exists(
select 1 from ChildTable t2
where t1.id = t2.parentid)

或在程序中

if exists(select 1 from table)
begin
 -- do stuff
end

11
投票

像其他人说你可以使用类似的东西:

IF NOT EXISTS (SELECT 1 FROM Table)
  BEGIN 
    --Do Something
  END 
ELSE
  BEGIN
    --Do Another Thing
  END

2
投票

为获得最佳性能,请使用特定列名而不是* - 例如:

SELECT TOP 1 <columnName> 
FROM <tableName> 

这是最佳的,因为它不是返回整个列列表,而是返回一个列。这可以节省一些时间。

此外,如果有任何值,只返回第一行,使其更快。实际上你只得到一个值 - 如果有任何行,或者如果没有行则没有值。

如果以分布式方式使用表(最可能的情况),那么将一个值从服务器传输到客户端要快得多。

您还应该明智地在所有列中进行选择,以便从列中获取尽可能少的资源。


1
投票

难道你不能只使用select count(*) from table计算行数(如果速度很重要,则使用索引列代替*)

如果没有,那么也许this article可以指出你正确的方向。


0
投票

快速:

SELECT TOP (1) CASE 
        WHEN **NOT_NULL_COLUMN** IS NULL
            THEN 'empty table'
        ELSE 'not empty table'
        END AS info
FROM **TABLE_NAME**
© www.soinside.com 2019 - 2024. All rights reserved.