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

Nejúčinnější metoda pro detekci změny sloupce na MS SQL Server

Začněme tím, že bych nikdy a myslím nikdy nevyvolal uložený proc ve spoušti. Chcete-li počítat s víceřádkovým vložením, museli byste kurzorem procházet proc. To znamená, že 200 000 řádků, které jste právě načetli pomocí dotazu založeného na množině (řekněme aktualizaci všech cen o 10 %), může dobře uzamknout tabulku na hodiny, protože se spouštěč statečně snaží zvládnout zátěž. Navíc, pokud se něco změní v procesu, můžete rozbít všechny vložky stolu nebo dokonce úplně zavěsit stůl. Pevně ​​věřím, že spouštěcí kód by neměl volat nic jiného než spouštěč.

Osobně dávám přednost jednoduše dělat svůj úkol. Pokud jsem do spouštěče zapsal akce, které chci správně provést, aktualizuje, smaže nebo vloží pouze tam, kde se změnily sloupce.

Příklad:Předpokládejme, že chcete aktualizovat pole last_name, které ukládáte na dvou místech kvůli denormalizaci, která je tam umístěna z důvodu výkonu.

update t
set lname = i.lname
from table2 t 
join inserted i on t.fkfield = i.pkfield
where t.lname <>i.lname

Jak můžete vidět, aktualizovalo by se pouze jména, která se liší od toho, co je aktuálně v tabulce, kterou aktualizuji.

Pokud chcete provést audit a zaznamenat pouze ty řádky, které se změnily, proveďte srovnání pomocí všech polí něco jako kde i.pole1 <> d.pole1 nebo i.pole2 <> d.pole3 (atd. přes všechna pole)



  1. Použití OpenVPN k zabezpečení přístupu k vašemu databázovému clusteru v cloudu

  2. Hibernate Query problém s Informix

  3. Snažte se pochopit, proč byste použili tento typ nastavení databáze

  4. Sloupec podobný identitě, ale založený na kritériích Seskupit podle