2017-03-06 3 views
3

以下のコードは動作しますが、かなり正確ですが、他の '標準的な'方法と同様にこれを行うのは問題ありませんか?try-catchブロックを使用してSQL Serverにテーブルをドロップする

--Drop table if exists 
begin try 
    drop table #temp 
end try 

begin catch 
    print 'table does not exist' 
end catch 

--Create table 
create table #temp(a int, b int) 
+1

これらはすべて要件に応じて異なります。一時的なテーブルを使って作業しているだけなら、Preamの答えはどれも良いものです。あなたのテクニックは、テーブルが存在するかどうかのフィードバックを提供し、そのフィードバックは役に立つかもしれません。 –

+1

例外が発生した場合に/を実行する予定がある場合、catchブロックは素晴らしいです。追加のアクションがない場合は、余分なタイピングだと主張することができます。この場合、一時的に存在するかどうかは気にしません。私はエラーを避けるためにチェックしています。このことを念頭において、IF NOT EXISTS/OBJECT_ID IS NULLメソッドはより簡潔です。 –

+0

@ destination-data 'Try catch'のように見えます。テーブルが存在しないときに追加のアクションが必要な場合、 'if ... begin additional-actions end'が行います。 – Serg

答えて

4

あなたが表に

存在していない#TEMPエラーメッセージを与えるためにトライキャッチを必要としない、最終的#TEMP表を作成するつもりのよう

If Object_Id('Tempdb..#temp') Is Not Null 
Drop Table #temp 
create table #temp 

を使用することをお勧めします

作成ステートメントが試行内にあった場合、いくつかの使用がある可能性があります。

+0

なぜですか?私は必ずしも同意していませんが、このアプローチがもたらすメリットについて説明できますか? –

+0

こんにちは@ destination-data質問のコードを見れば、anonxenはtempテーブルを作成したいのですが、tempTableが存在しないというエラーメッセージを出すためにtry catchを必要としません。試しの中で、それはいくつかの使用を持っている可能性があります – Pream

+0

あなたの答えにその説明が含まれている場合、私は間違いなくそれをupvoteだろう。 –

0

ステートメント、IFテーブルはドロップテーブルのみです。それ以外の場合は、直接 テーブルを作成してください。

BEGIN TRY 
    IF Object_Id('Tempdb..#temp') Is Not Null 
    DROP Table #temp 
    CREATE table #temp 
END try 
BEGIN CATCH 
    PRINT 'table does not exist' 
END CATCH 
関連する問題