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

SQL सर्वर 2005 में DEFAULT परिभाषा में किसी अन्य स्तंभ का संदर्भ देना

यह लीजिए, मैं इसे एक उदाहरण स्कीमा के साथ प्रदर्शित कर रहा हूं क्योंकि आपने अपनी वास्तविक तालिका/स्तंभ नाम प्रदान नहीं किए हैं।

तालिका:

CREATE TABLE test
  (
     id   INT NOT NULL PRIMARY KEY IDENTITY, --made up key
     col1 INT, --first column to add, wasn't sure if this was nullable or not
     col2 INT, --second column to add, wasn't sure if this was nullable or not
     col3 INT NOT NULL --this is the column to optionally insert into
  ) 

यहाँ ट्रिगर परिभाषा है:

CREATE TRIGGER demo
ON test
INSTEAD OF INSERT
AS
    INSERT INTO test (col1,col2,col3)
    SELECT inserted.col1,
           inserted.col2,
           CASE
             WHEN inserted.col3 IS NULL THEN COALESCE(inserted.col1, 0) + COALESCE(inserted.col2, 0)
             ELSE inserted.col3
           END
    FROM   inserted

मूल रूप से यह ट्रिगर में से एक के साथ तालिका पर किए गए किसी भी सम्मिलित विवरण को बदल देता है, इसलिए मैं inserted का उपयोग करके जांचता हूं अस्थायी तालिका यह देखने के लिए कि क्या वह मान जो हमारे गैर-शून्य वैकल्पिक कॉलम में डालने का प्रयास कर रहा है, col3 , शून्य है। अगर ऐसा है, तो मैं इसे col1 . के जोड़ से बदल देता हूं और col2 (मैं शून्य के साथ जोड़ रहा हूं क्योंकि आपने उल्लेख नहीं किया है कि दो स्रोत कॉलम शून्य हैं या नहीं)।

इसके बाद col3 . के बावजूद आप इन्सर्ट स्टेटमेंट चला सकते हैं जिसमें या तो इसे शामिल किया गया है या नहीं अशक्त नहीं है:

INSERT INTO test(col1,col2)
SELECT 12, 31
GO

INSERT INTO test(col1, col2, col3)
SELECT 1, 2, 89
GO

परिणाम हैं:

ID  COL1 COL2 COL3
------------------  
1   12   31    43
2   1    2     89

यदि ट्रिगर वहां नहीं था, तो आपको उस पहले सम्मिलन कथन को चलाने का प्रयास करने में त्रुटि हो सकती थी, आपको बता रही थी कि यह col3 में NULL सम्मिलित नहीं कर सका ।

यह भी ध्यान दें कि दूसरा इंसर्ट स्टेटमेंट जो कि एक मान निर्दिष्ट करता है, अनुरोध के अनुसार जोड़ द्वारा प्रतिस्थापित नहीं किया गया है।

यहां एक कार्यशील SQL Fiddle है




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. कीवर्ड 'current_timestamp' के पास गलत सिंटैक्स - लेकिन केवल एक डेटाबेस पर

  2. SQL सर्वर:sp_who2 का आउटपुट फ़िल्टर करें

  3. कोई पंक्ति नहीं लौटाने वाली क्वेरी के लिए डिफ़ॉल्ट पंक्ति कैसे सेट करें?

  4. चुनिंदा क्वेरी द्वारा लौटाई गई पंक्तियों की संख्या गिनना

  5. कर्सर का उपयोग किए बिना प्रत्येक पंक्ति के लिए SQL कॉल संग्रहीत प्रक्रिया