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

क्या कोई अपडेट INSERT ईवेंट को ट्रिगर करता है क्योंकि सभी अपडेट SQL सर्वर में DELETE + (re) INSERT होते हैं

एक अद्यतन कभी भी एक सम्मिलित घटना को ट्रिगर नहीं करता है, भले ही इसे भौतिक रूप से एक सम्मिलित / हटाने के रूप में लागू किया गया हो क्योंकि तार्किक रूप से ऑपरेशन अभी भी एक UPDATE है ।

स्वीकृत उत्तर में एक वाक्यांश है जो कुंजी कॉलम के तार्किक अपडेट के बारे में बात करने के लिए बिल्कुल सही नहीं है।

यह एक अद्वितीय अनुक्रमणिका के विरुद्ध बहु-पंक्ति अद्यतन के मामले में नहीं है। उनके लिए SQL सर्वर विभाजन/क्रमबद्ध/संक्षिप्त करें ऑपरेटरों। तो निम्नलिखित उदाहरण में 9 अपडेट ऑपरेशंस 1 डिलीट, 8 अपडेट और एक इंसर्ट में परिवर्तित हो जाते हैं।

CREATE TABLE TestingUpdate7 (
ID INT,
SomeString CHAR(50)
)

CREATE UNIQUE CLUSTERED INDEX idx_ID ON TestingUpdate7 (ID)

INSERT INTO TestingUpdate7 (ID, SomeString)
VALUES
(1,'One'),(2,'Two'),(3,'Three'),(4,'Four'),
(5,'Five'),(6,'Six'),(7,'Seven'),(8,'Eight'),(9,'Nine')

CHECKPOINT -- truncate the log, DB is in simple recovery.

UPDATE TestingUpdate7
SET  ID +=1

SELECT Operation, Context, AllocUnitName 
FROM fn_dblog(NULL, NULL) 

रिटर्न

+-----------------+--------------------+---------------------------+
|    Operation    |      Context       |       AllocUnitName       |
+-----------------+--------------------+---------------------------+
| LOP_BEGIN_CKPT  | LCX_NULL           | NULL                      |
| LOP_XACT_CKPT   | LCX_BOOT_PAGE_CKPT | NULL                      |
| LOP_END_CKPT    | LCX_NULL           | NULL                      |
| LOP_BEGIN_XACT  | LCX_NULL           | NULL                      |
| LOP_DELETE_ROWS | LCX_MARK_AS_GHOST  | dbo.TestingUpdate7.idx_ID |
| LOP_SET_BITS    | LCX_PFS            | dbo.TestingUpdate7.idx_ID |
| LOP_MODIFY_ROW  | LCX_CLUSTERED      | dbo.TestingUpdate7.idx_ID |
| LOP_MODIFY_ROW  | LCX_CLUSTERED      | dbo.TestingUpdate7.idx_ID |
| LOP_MODIFY_ROW  | LCX_CLUSTERED      | dbo.TestingUpdate7.idx_ID |
| LOP_MODIFY_ROW  | LCX_CLUSTERED      | dbo.TestingUpdate7.idx_ID |
| LOP_MODIFY_ROW  | LCX_CLUSTERED      | dbo.TestingUpdate7.idx_ID |
| LOP_MODIFY_ROW  | LCX_CLUSTERED      | dbo.TestingUpdate7.idx_ID |
| LOP_MODIFY_ROW  | LCX_CLUSTERED      | dbo.TestingUpdate7.idx_ID |
| LOP_MODIFY_ROW  | LCX_CLUSTERED      | dbo.TestingUpdate7.idx_ID |
| LOP_INSERT_ROWS | LCX_CLUSTERED      | dbo.TestingUpdate7.idx_ID |
| LOP_COMMIT_XACT | LCX_NULL           | NULL                      |
+-----------------+--------------------+---------------------------+


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL डेटा तुलना - कुछ तालिकाएँ अनुपलब्ध हैं

  2. SQL सर्वर 2005/2008 समूह डायनेमिक SQL का उपयोग किए बिना पैरामीटर के साथ कथन द्वारा?

  3. टी-एसक्यूएल कंपाउंड स्टेटमेंट डेडलॉक का कारण बनता है, कोई विचार क्यों?

  4. एसक्यूएल सर्वर 2005 में एसक्यूएल सर्वर 2008 बैकअप को पुनर्स्थापित करना संभव है?

  5. मैं फ़ाइल नाम दिखाने वाले अतिरिक्त कॉलम के साथ बल्क इंसर्ट कैसे करूं?