Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Bản cập nhật có kích hoạt sự kiện CHÈN vì tất cả các bản cập nhật đều XÓA + (lại) CHÈN trong SQL Server không

Bản cập nhật không bao giờ kích hoạt sự kiện chèn ngay cả khi về mặt vật lý nó được triển khai dưới dạng chèn / xóa vì về mặt logic hoạt động vẫn là UPDATE .

Có một cụm từ trong câu trả lời được chấp nhận không hoàn toàn đúng nếu được dùng để nói về các cập nhật hợp lý của cột chính.

Đây không phải là trường hợp của một bản cập nhật nhiều lần so với một chỉ mục duy nhất. Đối với những SQL Server đó đưa ra một kế hoạch với tách / sắp xếp / thu gọn các toán tử. Vì vậy, trong ví dụ sau, 9 hoạt động cập nhật được chuyển đổi thành 1 lần xóa, 8 lần cập nhật và chèn.

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) 

Trả lại

+-----------------+--------------------+---------------------------+
|    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. Tại sao IsNull chậm gấp đôi so với liên kết (cùng một truy vấn)?

  2. Sql Server 2008 - các tính năng điều chỉnh hiệu suất để chèn một lượng lớn dữ liệu

  3. Kết quả con trỏ không nhất quán khi lặp qua cơ sở dữ liệu

  4. SQL, Chọn giữa ngày / giờ

  5. Cách chuyển đổi giá trị được phân tách bằng dấu phẩy thành các hàng trong máy chủ sql