यदि यह मौजूद है तो एक अस्थायी तालिका छोड़ें


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)   

मैं अपनी प्रक्रिया में इन दो तालिकाओं के लिए उस अवधारणा को कैसे लागू कर सकता हूं?



जवाबों:


200

SQL सर्वर 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

hmm किसी कारण से जब मैं इसे निष्पादित करता हूं तो यह कहता है कि ## CLIENTS_KEYWORD एक अमान्य ऑब्जेक्ट नाम है
user710502

@user - आप SQL सर्वर के किस संस्करण पर हैं? मैं SQL Server 2008 पर हूं और (मुझे लगता है कि) ने उस मामले के लिए दोनों का परीक्षण किया जो तालिका ने किया था और मौजूद नहीं था। इसे बनाने की आवश्यकता हो सकती है EXECताकि पार्सर पिछले संस्करणों पर शिकायत न करे। यानी उपयोगEXEC('CREATE TABLE ##CLIENTS_KEYWORD(client_id INT)')
मार्टिन स्मिथ

+1क्वेरी के OBJECT_ID IS NULLबजाय के लिए tempdb.sys.tables
डेकाब

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) 
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.