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

केवल साधारण SQL INSERT के साथ मैन्युअल वेतन वृद्धि को लागू करना संभव है?

आप समझते हैं कि आपके बीच टकराव ठीक होगा?

आपको ऐसा कुछ करने की ज़रूरत है और इससे गतिरोध हो सकता है इसलिए सुनिश्चित करें कि आप यहां क्या हासिल करने की कोशिश कर रहे हैं

DECLARE @id int
BEGIN TRAN

    SELECT @id = MAX(id) + 1 FROM Table1 WITH (UPDLOCK, HOLDLOCK)
    INSERT INTO Table1(id, data_field)
    VALUES (@id ,'[blob of data]')
COMMIT TRAN

टक्कर की बात समझाने के लिए, मैंने कुछ कोड प्रदान किए हैं

पहले यह तालिका बनाएं और एक पंक्ति डालें

CREATE TABLE Table1(id int primary key not null, data_field char(100))
GO
Insert Table1 values(1,'[blob of data]')
Go

अब दो क्वेरी विंडो खोलें और इसे एक साथ चलाएं

declare @i int
set @i =1
while @i < 10000
begin
BEGIN TRAN

INSERT INTO Table1(id, data_field)
SELECT MAX(id) + 1, '[blob of data]' FROM Table1

COMMIT TRAN;
set @i [email protected] + 1
end

आप इनमें से एक गुच्छा देखेंगे

सर्वर:Msg 2627, स्तर 14, राज्य 1, पंक्ति 7 प्राथमिक कुंजी बाधा 'PK__Table1__3213E83F2962141D' का उल्लंघन। ऑब्जेक्ट 'dbo.Table1' में डुप्लीकेट कुंजी सम्मिलित नहीं कर सकता। स्टेटमेंट समाप्त कर दिया गया है।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Windows कार्य शेड्यूलर का उपयोग करके संग्रहीत कार्यविधि निष्पादित करना

  2. sql सर्वर तालिका में कई .txt फ़ाइलों को स्वतः आयात करें

  3. टीएसक्यूएल में किसी तारीख से कैलेंडर तिमाही कैसे प्राप्त करें

  4. mvc4 - db.SaveChanges () - दशमलव मान सीमा से बाहर है

  5. विल एंटिटी फ्रेमवर्क और SQL सर्वर किसी ऑब्जेक्ट/रिकॉर्ड को हटाते समय उसे लॉक कर देंगे