2012-01-01 29 views
1

IveがStackOverFlowを検索しましたが、見つかりませんでした。テーブル変数が存在するかどうかを確認しますか?

テーブルがあるかどうか知る方法はありますか変数は既に存在しますか?

何かのように:

IF OBJECT_ID('tempdb..#tbl') IS NOT NULL 
     DROP TABLE #tbl 

が、表ためヴァール ...

+0

テーブル変数またはテンポラリテーブルについて質問していますか?これらは別のものです。 – Oded

+2

テーブル変数がバッチにスコープされ、バッチが完了したらスコープから外れるので、これを知る必要はありますか? –

+0

@oded:テーブル変数 –

答えて

4

テーブル変数、彼らは変数ているので、彼らはその中に一時的または非一時的のいずれかのテーブルは異なっていますは作成されていません - と宣言されています。その点では、テーブルではなく、「通常の」変数に非常に近いです。

したがって、変数の存在について話すときと同じように、テーブル変数の存在について話すのは相当意味があります。ソースコード内に宣言した場合、その点からそのスコープの終わりまで存在しますSQL Serverでは、バッチまたはストアドプロシージャ/ファンクションとして宣言されています。変数を宣言せずにコード内で参照しようとすると、コードはコンパイルされません可能であれば、存在チェックを無意味にします。

おそらく、スクリプト内でテーブル変数を削除して再作成(作成/宣言)する必要があると思われる場合は、代わりに一時テーブルを使用することを検討してください。

+0

私はテーブルを削除する前に、それが存在するかどうかを確認する必要があります。そうでなければ、例外が発生します。 –

+0

@RoyiNamir:はい、もちろん、私はそれを主張していませんでした。私の指摘は、テーブル変数はドロップ/再作成/存在チェックには適していませんが、一時テーブルがあることです。コード内に一時行セットをドロップ/再作成する場合は、テーブル変数の代わりに一時テーブルを使用します。 –

+1

+1テーブル変数宣言を含むスコープが入力されるたびに暗黙的に作成されます。 –

0

私はこれが古いスレッドだと知っていますが、うまくいけば、これはここにいる誰かを助けるかもしれません。 SSMSから開発する場合、テーブル変数(例:select * into #tblvarFoo from dbName.schema.Foo)を選択するステートメントを再実行することができます。しかし、2回目に実行すると、既に存在するというエラーが表示されます。だから、あなたはそれを最初に落とすことに決めました。私はそれが存在する場合、私がチェックする必要があり、テーブルをドロップする前に、あなたが持っていないそうでなければ、私は 例外が発生します...

:しかし、その後、あなたはOPが持っていた問題を抱えていますテーブル変数を削除するか、その存在をチェックします。 再接続(クエリウィンドウで右クリックして、「接続 - >接続の変更...」を選択してください)を以前と同じサーバー/ dbにします。

1

テーブル変数@tableは、一時テーブル#tableとは少し異なります。
テーブル変数@tableは、テンポラリテーブル#tableの作成時に宣言する必要があります。
定義ごとに、定義されたスコープ(BeginEnd)の間に変数が存在すると宣言します。したがって、テーブル変数を削除する必要はありません。

テーブル変数を削除/削除する場合は、delete @tableステートメントを使用できます。

関連する問題