Articles

SQL Server Spustí Po Aktualizaci pro Konkrétní Hodnotu

Od: Dallas Snider | Aktualizováno: 2015-09-10 | Komentáře (6) | Související: Více > Spouštěčů

já třeba vytvořit SQL Server spoušť, která se spustí, když hodnota sloupce je aktualizován na konkrétní hodnotu. Jak to mám udělat?

řešení

v tomto tipu vám ukážeme, jak psát příkazy T-SQL, které vytvoří spouštěč SQLServer, který se spustí po aktualizaci hodnoty sloupce na konkrétní hodnotu.

na obrázku níže vidíme, kde jsme vytvořit náš příklad tabulku s názvem tblTriggerTest s primární klíč sloupec s názvem pkID, datum sloupec s názvem OrderApprovalDateTime a varchar sloupec s názvem OrderStatus. Tabulku naplníme třemi zkušebními záznamy s OrderApprovalDateTime nastavenou na NULL a OrderStatus nastavenou na „čekající“.

Vytvořit tabulku a vložit příklad dat

V tomto příkladu, chceme, aby naše spoušť k naplnění OrderApprovalDateTime s aktuálním datem poskytována getdate() po OrderStatus je aktualizován na „Schváleno“. T-SQL pro vytvoření tohoto spouštěče je uveden níže. Je velmi důležité zahrnout vnitřní spojení do vložené tabulky tak, aby byly ovlivněny pouze aktualizované řádky. Pomocí klauzule KDE OrderStatus= „Schválené“ sám o sobě omezit řádky aktualizováno výsledkem bude skutečně ve všech řádcích s OrderStatus hodnota Schválených aktualizovány ve stejnou dobu.

Úspěšně vytvořit spoušť

Do zkušební spoušť, provedeme T-SQL příkazu UPDATE nastavit OrderStatus hodnotu na „Schválené“ pro první řádek v tabulce (pkID = 1). Po příkazu aktualizace T-SQL pak provedeme dotaz T-SQL SELECT, abychom se ujistili, že spoušť byla provedena správně. Výstup z příkazů UPDATE A SELECT je uveden níže.

Úspěšně test spoušť

Všimněte si výše, že pouze první řada měla své OrderApprovalDateTime nastaven na aktuální datum, což je naše požadované chování. Musíme však provést druhý test, abychom se ujistili, že byl aktualizován správný počet řádků. V našem druhém testu provedeme příkaz T-SQL UPDATE, abychom nastavili hodnotu OrderStatus na „schváleno“ pro druhý řádek v tabulce (pkID = 2). Po výběru všech záznamů v tabulce si všimněte, jak se Orderapprivaldatetime pro druhý řádek nerovná Orderapprivaldatetime pro první řádek. Opět je to naše požadované chování a vše vypadá dobře.

znovu otestujte spoušť

kompletní kód pro tento tip je v rámečku níže.

use MSSQLTipsgocreate table tblTriggerTest( pkID integer Identity(1,1) primary key, OrderApprovalDateTime datetime, OrderStatus varchar(20))insert into tblTriggerTest values (NULL, 'Pending')insert into tblTriggerTest values (NULL, 'Pending')insert into tblTriggerTest values (NULL, 'Pending')select * from tblTriggerTestgocreate trigger trTriggerTest on tblTriggerTestafter updateasbegin set nocount on; update tblTriggerTest set OrderApprovalDateTime=getdate() from tblTriggerTest t inner join inserted i on t.pkID=i.pkID and i.OrderStatus='Approved'endgoupdate tblTriggerTest set OrderStatus='Approved' where pkID=1goselect * from tblTriggerTestgoupdate tblTriggerTest set OrderStatus='Approved' where pkID=2goselect * from tblTriggerTestgo
Další Kroky,

Trvat několik minut, aby prozkoumala, co se stane, když změníte VNITŘNÍ PŘIPOJIT, nebo přidat další sloupce do tabulky a spoušť.

také se podívejte na další tipy ontriggers v SQL Serveru na MSSQLTips.com.

  • Nutí Spoušť Střelby, Aby v SQL Server
  • Zabránit náhodnému update nebo delete příkazy všech řádků v tabulce Serveru SQL
  • Audit Spouští, když jsou Zakázány nebo Povoleny pro SQL Server

Poslední aktualizace: 2015-09-10

skripty

další tip tlačítko

O autorovi
MSSQLTips autor Dallas SniderDr. Dallas Snider je odborným asistentem na katedře informatiky na University of West Florida a má 18 + let zkušeností s SQL.
Zobrazit všechny mé tipy
související zdroje

  • další tipy pro vývojáře databází…