如何检查表是否包含行sql server 2005?
出于什么目的?
IF EXISTS (SELECT * FROM Table)...
SELECT TOP 1 1 FROM Table
返回零行或一行SELECT COUNT(*) FROM Table
此外,您可以使用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
像其他人说你可以使用类似的东西:
IF NOT EXISTS (SELECT 1 FROM Table)
BEGIN
--Do Something
END
ELSE
BEGIN
--Do Another Thing
END
为获得最佳性能,请使用特定列名而不是* - 例如:
SELECT TOP 1 <columnName>
FROM <tableName>
这是最佳的,因为它不是返回整个列列表,而是返回一个列。这可以节省一些时间。
此外,如果有任何值,只返回第一行,使其更快。实际上你只得到一个值 - 如果有任何行,或者如果没有行则没有值。
如果以分布式方式使用表(最可能的情况),那么将一个值从服务器传输到客户端要快得多。
您还应该明智地在所有列中进行选择,以便从列中获取尽可能少的资源。
难道你不能只使用select count(*) from table
计算行数(如果速度很重要,则使用索引列代替*)
如果没有,那么也许this article可以指出你正确的方向。
快速:
SELECT TOP (1) CASE
WHEN **NOT_NULL_COLUMN** IS NULL
THEN 'empty table'
ELSE 'not empty table'
END AS info
FROM **TABLE_NAME**