如何检查表是否包含行sql server 2005?
答案 0 :(得分:88)
出于什么目的?
IF EXISTS (SELECT * FROM Table)...
SELECT TOP 1 1 FROM Table
返回零行或一行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**