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

एक कस्टम ऑटो वेतन वृद्धि कॉलम बनाए रखना

समस्या यह है कि जहां आपके पास कई पंक्तियां डाली जा रही हैं, आप सभी पंक्तियों के लिए एक ही अगली उपलब्ध आईडी का उपयोग कर रहे हैं, आपको ROW_NUMBER() जोड़ना होगा यह सुनिश्चित करने के लिए कि xid इन्सर्ट में अद्वितीय था:

insert into [xtable] (XID)
select [x].[NextavailableID] + ROW_NUMBER() OVER (ORDER BY i.ID)
from inserted [i]
cross apply
(
  select coalesce(max([t].[XID]), 0) [NextavailableID]
  from [xtable] [t] WITH (TABLOCK, HOLDLOCK)
) [x];

डुप्लिकेट को रोकने के संबंध में आप xtable . को लॉक करने के लिए तालिका संकेतों का उपयोग कर सकते हैं अधिकतम xid . प्राप्त करते समय ।

इन तालों का उपयोग करने का दोष यह है कि आप गतिरोध प्राप्त करेंगे। इस कॉलम पर आपके पास एक अद्वितीय बाधा/सूचकांक होना चाहिए क्योंकि यह डुप्लिकेट को रोकेगा, हालांकि जब दौड़ की स्थिति पूरी हो जाती है तो इसका परिणाम अपवाद भी होगा। आखिरकार, आप जो भी तरीका चुनेंगे, आपको किसी न किसी तरह का त्याग करना होगा।



  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. SQL सर्वर अनपेक्षित सप्ताह संख्या लौटाता है

  3. कैसे पता करें कि पेज लॉक किस टेबल से संबंधित है

  4. SQL सर्वर में किसी मौजूदा कॉलम में DEFAULT बाधा कैसे जोड़ें

  5. कम समय में चलने वाले CTE के RowTotal की गणना कैसे करें