Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

SQL सर्वर:डेटाबेस प्राथमिकता समस्या का उपयोग करें

जैसा कि टिप्पणियों में बताया गया है, आप GO . नहीं डाल सकते हैं SQL कथनों के समूह के बीच में जो एक दूसरे पर निर्भर हैं क्योंकि:

  1. GO एक संकलित बैच के अंत और अगले की शुरुआत को इंगित करता है। अधिकांश कथन संदर्भ (जैसे IF..ELSE ) GO . का विस्तार नहीं कर सकता . और,

  2. GO एक SQL स्टेटमेंट भी नहीं है, यह एक मैनेजमेंट स्टूडियो/SQLCMD कमांड है, इसलिए इसे कहीं और पहचाना नहीं जाएगा।

आपकी स्थिति एक सामान्य आवश्यकता है, लेकिन इसका कोई एक समाधान नहीं है। आपके द्वारा सूचीबद्ध विशिष्ट मामले के लिए, डायनेमिक SQL का उपयोग करना शायद सबसे अच्छा तरीका है:

IF EXISTS(select * from sys.databases where name='MyDB')
 BEGIN
   EXEC('
     USE MyDB
     EXEC(''
       DROP USER [tester]
        .
        .
        . 
     '')  
   ')
 END
ELSE
 PRINT 'MyDB database is not available'

यह इस तथ्य का लाभ उठाता है कि डायनेमिक SQL एक्सक्शंस प्रत्येक GO के लिए दोनों प्रतिस्थापन के लिए अपने स्वयं के बैच का गठन करते हैं प्रभाव (एक नया बैच शुरू करना) और USE . के अजीबोगरीब इंटरैक्शन को अलग करना संकलक के साथ। यह निश्चित रूप से बहुत कठिन है क्योंकि USE..GO के बाद चीजों को "डबल-रैप" करने की आवश्यकता है आदेश।

यह भी ध्यान दें कि इस डबल-रैपिंग के कारण इसके अंदर के किसी भी तार को चौगुना-उद्धृत करना होगा।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. जहां क्लॉज में अस्थायी कॉलम का उपयोग नहीं किया जा सकता है?

  2. एसक्यूएल जॉइन पर क्वेरी

  3. TABLESAMPLE पंक्तियों की गलत संख्या देता है?

  4. पैरामीटरयुक्त गतिशील एसक्यूएल क्वेरी

  5. बिना वैज्ञानिक संकेतन के SQL सर्वर में फ्लोट को वर्चर में बदलें