4

以下の両方のクエリを試しましたが、同時に実行されます。しかし、印刷の代わりに多くのストアド プロシージャで RaiseError が使用されているのを見てきました。

クエリ 1:

BEGIN
    WAITFOR DELAY '00:00:03.00'

    PRINT 'DELAY 1 HAS ENDED'

    WAITFOR DELAY '00:00:03.00'

    PRINT 'DELAY 2 HAS ENDED'
END

クエリ 2:

BEGIN
    WAITFOR DELAY '00:00:03.00'

    RAISERROR ('DELAY 1 HAS ENDED', 10,1) WITH NOWAIT

    WAITFOR DELAY '00:00:03.00'

    RAISERROR ('DELAY 2 HAS ENDED', 10,1) WITH NOWAIT

END

どちらも6秒後にのみ目的の出力を提供します(SQL Server 2008 R2でこれを確認しました)

4

4 に答える 4

9

RAISERRORoverの利点は、 andPRINTを気にせずにメッセージ内に変数値を埋め込むことができることです。例えば:CASTCONVERT

 BEGIN
     DECLARE @m INT = 0

     WAITFOR DELAY '00:00:01.00'
     SET @m += 1;
     RAISERROR ('DELAY %d HAS ENDED', 10, 1, @m)
 
     WAITFOR DELAY '00:00:01.00'     
     SET @m += 1;
     RAISERROR ('DELAY %d HAS ENDED', 10, 1, @m)
 
 END

上記の両方の例で同じ出力が生成されますが、変数の値がメッセージに挿入されます。あなたがしPRINTなければならない:

PRINT 'DELAY ' + CONVERT(VARCHAR(5), @m) + ' HAS ENDED'

...可能ですが、面倒です...

于 2012-11-12T09:38:10.193 に答える
3

私はあなたと同じバージョンのサーバーを使用しており、クエリ 2 は 3 秒後に最初の結果を出力します (予想どおり)。メッセージを表示するには、Microsoft SQL Server Management Studio の [メッセージ] タブに自分で切り替える必要があります。

于 2012-07-26T09:46:56.553 に答える