一時テーブルが存在する場合はそれを削除します


96

オンザフライで2つのテーブルを作成するSQLのコードが2行あるので、次のようにする必要があります

IF TABLE EXISTS 
    DROP IT AND CREATE IT AGAIN
ELSE
    CREATE IT

私の行は次のものです

CREATE TABLE ##CLIENTS_KEYWORD(client_id int)     
CREATE TABLE ##TEMP_CLIENTS_KEYWORD(client_id int)   

手順でこれらの2つのテーブルにその概念を適用するにはどうすればよいですか?



回答:


200

SQL Server 2016から使用できる

 DROP TABLE IF EXISTS ##CLIENTS_KEYWORD

以前のバージョンで使用できます

IF OBJECT_ID('tempdb..##CLIENTS_KEYWORD', 'U') IS NOT NULL
/*Then it exists*/
DROP TABLE ##CLIENTS_KEYWORD
CREATE TABLE ##CLIENTS_KEYWORD
(
   client_id INT
)

ドロップして再作成するのではなく、テーブルを切り捨てることを検討することもできます。

IF OBJECT_ID('tempdb..##CLIENTS_KEYWORD', 'U') IS NOT NULL
  TRUNCATE TABLE ##CLIENTS_KEYWORD
ELSE
  CREATE TABLE ##CLIENTS_KEYWORD
  (
     client_id INT
  ) 

このアプローチの下に切り捨てを投稿することもできますか?それは私にとってより良いものになるかもしれません:)ありがとう
user710502 '31

なんらかの理由で実行すると、## CLIENTS_KEYWORDは無効なオブジェクト名であると表示されます
user710502

@user-SQL Serverのどのバージョンを使用していますか?私はSQL Server 2008を使用しており、(私は)テーブルが存在する場合と存在しない場合の両方についてテストしました。EXEC以前のバージョンでパーサーが文句を言わないように、作成をでラップする必要があるかもしれません。すなわち使用EXEC('CREATE TABLE ##CLIENTS_KEYWORD(client_id INT)')
マーティン・スミス

クエリのOBJECT_ID IS NULL代わりに+1 tempdb.sys.tables
ダカブ2014

1
@TobySpeight-質問は一時テーブルについてです。これらのポイントのほとんどは、それに関連する限られたものです。
マーティンスミス

13

そのobject_idを取得して、存在を確認します。

if object_id('tempdb..##clients_keyword') is not null
    drop table ##clients_keyword

0

あなたが求めたのは:

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

       CREATE TABLE ##CLIENTS_KEYWORD(client_id int)

    END
ELSE
   CREATE TABLE ##CLIENTS_KEYWORD(client_id int) 

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

       CREATE TABLE ##TEMP_CLIENTS_KEYWORD(client_id int)

    END
ELSE
   CREATE TABLE ##TEMP_CLIENTS_KEYWORD(client_id int) 

テーブルを削除するかどうかに関係なく、常にテーブルを作成するため、少し最適化されたソリューションは次のとおりです。

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

CREATE TABLE ##CLIENTS_KEYWORD(client_id int) 

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

CREATE TABLE ##TEMP_CLIENTS_KEYWORD(client_id int) 
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.