4

我试过这样做:

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

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

感谢帮助!

4

4 回答 4

3

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)
.....
于 2013-02-28T06:52:04.030 回答
1

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

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
于 2013-02-27T06:02:29.257 回答
0

写吧:

IF OBJECT_ID('a_b_Stage2_supA_demB') is not null
    IF select COUNT(*) from a_b_Stage2_supA_demB > 0
        .....
于 2013-02-27T05:36:57.310 回答
0
IF OBJECT_ID('dept') is not NULL
BEGIN
IF exists(SELECT 1 FROM dept)
PRINT 'exists with rows'
END
于 2013-02-27T06:32:42.637 回答