Ho due linee di codice in SQL che creano due tabelle al volo, ho bisogno di fare qualcosa come
IF TABLE EXISTS
DROP IT AND CREATE IT AGAIN
ELSE
CREATE IT
le mie linee sono le seguenti
CREATE TABLE ##CLIENTS_KEYWORD(client_id int)
CREATE TABLE ##TEMP_CLIENTS_KEYWORD(client_id int)
come posso applicare questo concetto per queste due tabelle nella mia procedura?
Da SQL Server 2016 si può semplicemente usare
DROP TABLE IF EXISTS ##CLIENTS_KEYWORD
Sulle versioni precedenti è possibile utilizzare
IF OBJECT_ID('tempdb..##CLIENTS_KEYWORD', 'U') IS NOT NULL
/*Then it exists*/
DROP TABLE ##CLIENTS_KEYWORD
CREATE TABLE ##CLIENTS_KEYWORD
(
client_id INT
)
Potresti anche considerare di troncare la tabella piuttosto che abbandonarla e ricrearla.
IF OBJECT_ID('tempdb..##CLIENTS_KEYWORD', 'U') IS NOT NULL
TRUNCATE TABLE ##CLIENTS_KEYWORD
ELSE
CREATE TABLE ##CLIENTS_KEYWORD
(
client_id INT
)
Controlla l'esistenza recuperando il suo object_id:
if object_id('tempdb..##clients_keyword') is not null
drop table ##clients_keyword
Quello che hai chiesto è:
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)
Dato che dovrai sempre creare la tabella, indipendentemente dal fatto che la tabella sia cancellata o meno; una soluzione leggermente ottimizzata è:
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)