sql >> Database >  >> RDS >> Sqlserver

Meest efficiënte methode om kolomverandering in MS SQL Server te detecteren

Laten we beginnen met ik zou nooit en ik bedoel nooit een opgeslagen proces in een trigger aanroepen. Om rekening te houden met een invoeging met meerdere rijen, zou u door de procedure moeten gaan. Dit betekent dat de 200.000 rijen die u zojuist hebt geladen via een op een set gebaseerde query (bijvoorbeeld het bijwerken van alle prijzen met 10%) de tabel urenlang kunnen vergrendelen terwijl de trigger moedig probeert om de belasting af te handelen. En als er iets verandert in de procedure, kun je alle inzetstukken op de tafel breken of zelfs de tafel helemaal ophangen. Ik ben er vast van overtuigd dat de triggercode niets anders buiten de trigger mag aanroepen.

Persoonlijk doe ik mijn taak liever gewoon. Als ik de acties die ik wil uitvoeren correct in de trigger heb geschreven, wordt deze alleen bijgewerkt, verwijderd of ingevoegd waar kolommen zijn gewijzigd.

Voorbeeld:stel dat u het veld achternaam wilt bijwerken dat u op twee plaatsen opslaat vanwege een denormalisatie die daar om prestatieredenen is geplaatst.

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

Zoals je kunt zien, zou het alleen de namen bijwerken die anders zijn dan wat er momenteel in de tabel staat die ik bijwerk.

Als u auditing wilt doen en alleen die rijen wilt opnemen die zijn gewijzigd, doe dan de vergelijking met alle velden, zoiets als waar i.field1 <> d.field1 of i.field2 <> d.field3 (enz. door alle velden)



  1. Homebrew, MySQL 8-ondersteuning

  2. Hoe kan ik een selectievakje aan een gegevenstabel toevoegen om de geselecteerde rij te verwijderen?

  3. met behulp van de postgresql gem async

  4. Escape invoergegevens voor postgre