4

私はこれをやろうとしました:

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

ただし、「and」条件の最初の側がすでに失敗しているにもかかわらず、SQL Server はa_b_Stage2_supA_demB2 番目の条件をチェックしようとするため、存在しない場合はエラーを返します。

手伝ってくれてありがとう!

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 に答える