sql >> Databáze >  >> RDS >> Sqlserver

Spouští aktualizace událost INSERT, protože všechny aktualizace jsou na serveru SQL DELETE + (znovu) INSERT

Aktualizace nikdy nespustí událost vložení, i když je fyzicky implementována jako vložení/smazání, protože logicky je operace stále UPDATE .

V přijaté odpovědi je fráze, která není tak docela pravdivá, pokud se jedná o logické aktualizace klíčového sloupce.

Toto není případ víceřádkové aktualizace proti jedinečnému indexu. Pro ty SQL Server poskytuje plán s rozdělit/seřadit/sbalit operátory. V následujícím příkladu se tedy 9 aktualizačních operací převede na 1 odstranění, 8 aktualizací a vložení.

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) 

Vrátí

+-----------------+--------------------+---------------------------+
|    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. Co dělá U aktuálního příkazu došlo k závažné chybě. Výsledky, pokud existují, by měly být vyřazeny. Znamená to chybu SQL Azure?

  2. Práce s Java daty v Qlik Sense

  3. MySQL parametrizovaný dotaz pomocí Like

  4. Vyhledávání v blízkosti v Mapách Google, PHP a MySQL