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つのテーブルに適用するにはどうしたらいいでしょうか?
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
)
そのobject_idを取得して存在を確認する。
if object_id('tempdb..##clients_keyword') is not null
drop table ##clients_keyword
求められたのは
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)