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

दो अशक्त FK के बीच एक SQL XOR बाधा जोड़ें

इसे प्राप्त करने का एक तरीका यह है कि "अनन्य OR" का वास्तव में क्या अर्थ है:

CHECK (
    (FK1 IS NOT NULL AND FK2 IS NULL)
    OR (FK1 IS NULL AND FK2 IS NOT NULL)
)

हालाँकि, यदि आपके पास कई FK हैं, तो उपरोक्त विधि जल्दी से बोझिल हो सकती है, इस स्थिति में आप ऐसा कुछ कर सकते हैं:

CHECK (
    1 = (
        (CASE WHEN FK1 IS NULL THEN 0 ELSE 1 END)
        + (CASE WHEN FK2 IS NULL THEN 0 ELSE 1 END)
        + (CASE WHEN FK3 IS NULL THEN 0 ELSE 1 END)
        + (CASE WHEN FK4 IS NULL THEN 0 ELSE 1 END)
        ...
    )
)

BTW, उस पैटर्न के लिए वैध उपयोग हैं, उदाहरण के लिए यह वाला (यद्यपि आस्थगित बाधाओं की कमी के कारण MS SQL सर्वर पर लागू नहीं होता है)। क्या यह आपके विशेष मामले में वैध है, मैं अब तक आपके द्वारा प्रदान की गई जानकारी के आधार पर निर्णय नहीं ले सकता।



  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. SQL तर्क समस्या और क्रॉस क्वेरी लागू करें

  4. यह जांचने का बेहतर तरीका है कि क्या डेटा पहले से मौजूद है और डालें

  5. एक सहयोगी तालिका का उपयोग करने के बजाय झंडे को बिटमास्क के रूप में स्टोर करना बेहतर कब होता है?