如何检查表是否存在且在一个IF中它是否为空

时间:2013-02-27 05:12:40

标签: sql-server sql-server-2008

我试过这样做:

if OBJECT_ID('a_b_Stage2_supA_demB') is not null
and (select COUNT(*) from a_b_Stage2_supA_demB) > 0

但是当a_b_Stage2_supA_demB不存在时,SQL Server会返回错误,因为即使“和”条件的第一面已经失败,它仍会尝试检查第二个条件。

感谢您的帮助!

4 个答案:

答案 0 :(得分:2)

DMV可以轻松解决您的问题:

IF EXISTS (select * from sys.tables t 
    INNER JOIN sys.partitions p on t.object_id = p.object_id 
    WHERE t.name = 'a_b_Stage2_supA_demB' and p.rows > 0)
.....

答案 1 :(得分:1)

不幸的是,这是不可能的。 SQL Server将检查以确保在编译之前存在所有对象引用(在基本代码路径中)。如果没有陈述怎么样?

begin try
    exec('declare @x int = (
              select 1 / COUNT(*)
              from a_b_Stage2_supA_demB)');
    print 'true';
end try
begin catch
    print 'false';
end catch

答案 2 :(得分:0)

只需写下:

IF OBJECT_ID('a_b_Stage2_supA_demB') is not null
    IF select COUNT(*) from a_b_Stage2_supA_demB > 0
        .....

答案 3 :(得分:0)

IF OBJECT_ID('dept') is not NULL
BEGIN
IF exists(SELECT 1 FROM dept)
PRINT 'exists with rows'
END