วางตารางชั่วคราวหากมีอยู่


96

ฉันมีโค้ดสองบรรทัดใน SQL ที่สร้างตารางสองตารางได้ทันทีฉันต้องทำสิ่งที่ชอบ

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)   

ฉันจะใช้แนวคิดนั้นสำหรับสองตารางนี้ในขั้นตอนของฉันได้อย่างไร



คำตอบ:


201

จาก 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

อืมด้วยเหตุผลบางอย่างเมื่อฉันดำเนินการมันบอกว่า ## CLIENTS_KEYWORD เป็นชื่อวัตถุที่ไม่ถูกต้อง
user710502

@user - คุณใช้ SQL Server เวอร์ชันใด ฉันใช้ SQL Server 2008 และ (คิดว่าฉัน) ทดสอบทั้งสองอย่างสำหรับกรณีที่ตารางทำและไม่มีอยู่ อาจต้องตัดการสร้างEXECเพื่อให้ตัววิเคราะห์ไม่บ่นเกี่ยวกับเวอร์ชันก่อนหน้า เช่นใช้EXEC('CREATE TABLE ##CLIENTS_KEYWORD(client_id INT)')
Martin Smith

+1 สำหรับOBJECT_ID IS NULLแทนtempdb.sys.tablesแบบสอบถาม
dakab

1
@TobySpeight - คำถามเกี่ยวกับตารางชั่วคราว ประเด็นเหล่านี้ส่วนใหญ่มีความเกี่ยวข้อง จำกัด กับสิ่งนั้น
Martin Smith


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.