检查表是否包含行sql server 2005

时间:2010-01-27 09:59:00

标签: sql-server-2005

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

6 个答案:

答案 0 :(得分:88)

出于什么目的?

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

答案 1 :(得分:34)

此外,您可以使用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

答案 2 :(得分:10)

Like Other说你可以使用类似的东西:

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

答案 3 :(得分:2)

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

SELECT TOP 1 <columnName> 
FROM <tableName> 

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

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

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

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

答案 4 :(得分:1)

你不能只使用select count(*) from table计算行数(或者如果速度很重要,则使用索引列而不是*)?

如果没有,则this article可能会指出正确的方向。

答案 5 :(得分:0)

快速:

SELECT TOP (1) CASE 
        WHEN **NOT_NULL_COLUMN** IS NULL
            THEN 'empty table'
        ELSE 'not empty table'
        END AS info
FROM **TABLE_NAME**