Έχω δύο γραμμές κώδικα στην SQL που δημιουργούν δύο πίνακες on the fly, πρέπει να κάνω κάτι σαν
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)
πώς μπορώ να εφαρμόσω αυτή την έννοια για αυτούς τους δύο πίνακες στη διαδικασία μου;
Από τον 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)