<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://sqle.ru/index.php?action=history&amp;feed=atom&amp;title=SQL_Server%2FT-SQL_Tutorial%2FTrigger%2FTrigger</id>
		<title>SQL Server/T-SQL Tutorial/Trigger/Trigger - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://sqle.ru/index.php?action=history&amp;feed=atom&amp;title=SQL_Server%2FT-SQL_Tutorial%2FTrigger%2FTrigger"/>
		<link rel="alternate" type="text/html" href="http://sqle.ru/index.php?title=SQL_Server/T-SQL_Tutorial/Trigger/Trigger&amp;action=history"/>
		<updated>2026-04-04T02:27:10Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://sqle.ru/index.php?title=SQL_Server/T-SQL_Tutorial/Trigger/Trigger&amp;diff=6823&amp;oldid=prev</id>
		<title> в 13:46, 26 мая 2010</title>
		<link rel="alternate" type="text/html" href="http://sqle.ru/index.php?title=SQL_Server/T-SQL_Tutorial/Trigger/Trigger&amp;diff=6823&amp;oldid=prev"/>
				<updated>2010-05-26T13:46:16Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr style=&quot;vertical-align: top;&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Версия 13:46, 26 мая 2010&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; style=&quot;text-align: center;&quot; lang=&quot;ru&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(нет различий)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
			</entry>

	<entry>
		<id>http://sqle.ru/index.php?title=SQL_Server/T-SQL_Tutorial/Trigger/Trigger&amp;diff=6824&amp;oldid=prev</id>
		<title>Admin: 1 версия</title>
		<link rel="alternate" type="text/html" href="http://sqle.ru/index.php?title=SQL_Server/T-SQL_Tutorial/Trigger/Trigger&amp;diff=6824&amp;oldid=prev"/>
				<updated>2010-05-26T10:24:33Z</updated>
		
		<summary type="html">&lt;p&gt;1 версия&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== Check business logic in a trigger==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
2&amp;gt;&lt;br /&gt;
3&amp;gt; CREATE TABLE Products (&lt;br /&gt;
4&amp;gt;      ProductID int IDENTITY (1, 1) NOT NULL ,&lt;br /&gt;
5&amp;gt;      ProductName nvarchar (40) NOT NULL ,&lt;br /&gt;
6&amp;gt;      SupplierID int NULL ,&lt;br /&gt;
7&amp;gt;      CategoryID int NULL ,&lt;br /&gt;
8&amp;gt;      QuantityPerUnit nvarchar (20) NULL ,&lt;br /&gt;
9&amp;gt;      UnitPrice money NULL,&lt;br /&gt;
10&amp;gt;     UnitsInStock smallint NULL,&lt;br /&gt;
11&amp;gt;     UnitsOnOrder smallint NULL,&lt;br /&gt;
12&amp;gt;     ReorderLevel smallint NULL,&lt;br /&gt;
13&amp;gt;     Discontinued bit NOT NULL&lt;br /&gt;
14&amp;gt; )&lt;br /&gt;
15&amp;gt; GO&lt;br /&gt;
1&amp;gt;    CREATE TRIGGER ProductIsRationed&lt;br /&gt;
2&amp;gt;       ON Products&lt;br /&gt;
3&amp;gt;       FOR UPDATE&lt;br /&gt;
4&amp;gt;    AS&lt;br /&gt;
5&amp;gt;       IF EXISTS&lt;br /&gt;
6&amp;gt;          (&lt;br /&gt;
7&amp;gt;           SELECT &amp;quot;True&amp;quot;&lt;br /&gt;
8&amp;gt;           FROM Inserted i&lt;br /&gt;
9&amp;gt;           JOIN Deleted d&lt;br /&gt;
10&amp;gt;              ON i.ProductID = d.ProductID&lt;br /&gt;
11&amp;gt;           WHERE (d.UnitsInStock - i.UnitsInStock) &amp;gt; d.UnitsInStock / 2&lt;br /&gt;
12&amp;gt;              AND d.UnitsInStock - i.UnitsInStock &amp;gt; 0&lt;br /&gt;
13&amp;gt;          )&lt;br /&gt;
14&amp;gt;       BEGIN&lt;br /&gt;
15&amp;gt;          RAISERROR(&amp;quot;Cannot reduce stock by more than 50%% at once.&amp;quot;,16,1)&lt;br /&gt;
16&amp;gt;          ROLLBACK TRAN&lt;br /&gt;
17&amp;gt;       END&lt;br /&gt;
18&amp;gt;       GO&lt;br /&gt;
1&amp;gt;&lt;br /&gt;
2&amp;gt; drop TRIGGER ProductIsRationed;&lt;br /&gt;
3&amp;gt; GO&lt;br /&gt;
1&amp;gt;&lt;br /&gt;
2&amp;gt; drop table Products;&lt;br /&gt;
3&amp;gt; GO&lt;br /&gt;
1&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
== Check record matching in a trigger==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
2&amp;gt;    CREATE TABLE Activity(&lt;br /&gt;
3&amp;gt;       ActivityID         int   IDENTITY (1, 1)    NOT NULL,&lt;br /&gt;
4&amp;gt;       ActivityType       int                      NOT NULL,&lt;br /&gt;
5&amp;gt;       ActivityDate       datetime                 NOT NULL,&lt;br /&gt;
6&amp;gt;       ActivityComplete   bit NOT                  NULL&lt;br /&gt;
7&amp;gt;    )&lt;br /&gt;
8&amp;gt;    CREATE TABLE ActivityFootball(&lt;br /&gt;
9&amp;gt;       ActivityID        int       NOT NULL,&lt;br /&gt;
10&amp;gt;       InstantReplay     bit       NOT NULL,&lt;br /&gt;
11&amp;gt;       FlagTackle        bit       NOT NULL,&lt;br /&gt;
12&amp;gt;       TwoPointPlay      bit       NOT NULL&lt;br /&gt;
13&amp;gt;    )&lt;br /&gt;
14&amp;gt;    GO&lt;br /&gt;
1&amp;gt;&lt;br /&gt;
2&amp;gt;    CREATE TABLE ActivitySoftball(&lt;br /&gt;
3&amp;gt;       ActivityID        int       NOT NULL,&lt;br /&gt;
4&amp;gt;       NoOfRefs          tinyint   NOT NULL,&lt;br /&gt;
5&amp;gt;       DiamondSize       tinyint   NOT NULL,&lt;br /&gt;
6&amp;gt;       StealingAllowed   bit       NOT NULL&lt;br /&gt;
7&amp;gt;    )&lt;br /&gt;
8&amp;gt;    GO&lt;br /&gt;
1&amp;gt;&lt;br /&gt;
2&amp;gt;&lt;br /&gt;
3&amp;gt;    CREATE TRIGGER FootballIsExclusiveActivity ON ActivityFootball&lt;br /&gt;
4&amp;gt;       FOR INSERT, UPDATE&lt;br /&gt;
5&amp;gt;    AS&lt;br /&gt;
6&amp;gt;       IF EXISTS(&lt;br /&gt;
7&amp;gt;           SELECT &amp;quot;True&amp;quot;&lt;br /&gt;
8&amp;gt;           FROM Inserted i&lt;br /&gt;
9&amp;gt;           LEFT JOIN Activity a&lt;br /&gt;
10&amp;gt;              ON i.ActivityID = a.ActivityID&lt;br /&gt;
11&amp;gt;           WHERE a.ActivityID IS NULL&lt;br /&gt;
12&amp;gt;          )&lt;br /&gt;
13&amp;gt;       BEGIN&lt;br /&gt;
14&amp;gt;          RAISERROR(&amp;quot;Football item Must Have Corresponding Activity&amp;quot;,16,1)&lt;br /&gt;
15&amp;gt;          ROLLBACK TRAN&lt;br /&gt;
16&amp;gt;       END&lt;br /&gt;
17&amp;gt;       IF EXISTS(&lt;br /&gt;
18&amp;gt;           SELECT &amp;quot;True&amp;quot;&lt;br /&gt;
19&amp;gt;           FROM Inserted i&lt;br /&gt;
20&amp;gt;           LEFT JOIN ActivitySoftball asb ON i.ActivityID = asb.ActivityID&lt;br /&gt;
21&amp;gt;           WHERE asb.ActivityID IS NOT NULL&lt;br /&gt;
22&amp;gt;          )&lt;br /&gt;
23&amp;gt;       BEGIN&lt;br /&gt;
24&amp;gt;          RAISERROR(&amp;quot;Matching Softball Record Exists.&amp;quot;,16,1)&lt;br /&gt;
25&amp;gt;          ROLLBACK TRAN&lt;br /&gt;
26&amp;gt;       END&lt;br /&gt;
27&amp;gt;     GO&lt;br /&gt;
1&amp;gt;&lt;br /&gt;
2&amp;gt; drop TRIGGER FootballIsExclusiveActivity ;&lt;br /&gt;
3&amp;gt; GO&lt;br /&gt;
1&amp;gt;&lt;br /&gt;
2&amp;gt; drop table Activity;&lt;br /&gt;
3&amp;gt; drop table ActivityFootball;&lt;br /&gt;
4&amp;gt; drop table ActivitySoftball;&lt;br /&gt;
5&amp;gt; GO&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
== Check @@ROWCOUNT in a trigger==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
5&amp;gt; CREATE TABLE employee(&lt;br /&gt;
6&amp;gt;    id          INTEGER NOT NULL PRIMARY KEY,&lt;br /&gt;
7&amp;gt;    first_name  VARCHAR(10),&lt;br /&gt;
8&amp;gt;    last_name   VARCHAR(10),&lt;br /&gt;
9&amp;gt;    salary      DECIMAL(10,2),&lt;br /&gt;
10&amp;gt;     start_Date  DATETIME,&lt;br /&gt;
11&amp;gt;     region      VARCHAR(10),&lt;br /&gt;
12&amp;gt;     city        VARCHAR(20),&lt;br /&gt;
13&amp;gt;     managerid   INTEGER&lt;br /&gt;
14&amp;gt;  );&lt;br /&gt;
15&amp;gt;  GO&lt;br /&gt;
1&amp;gt; INSERT INTO employee VALUES (1, &amp;quot;Jason&amp;quot; ,  &amp;quot;Martin&amp;quot;, 5890,&amp;quot;2005-03-22&amp;quot;,&amp;quot;North&amp;quot;,&amp;quot;Vancouver&amp;quot;,3);&lt;br /&gt;
2&amp;gt; GO&lt;br /&gt;
(1 rows affected)&lt;br /&gt;
1&amp;gt; INSERT INTO employee VALUES (2, &amp;quot;Alison&amp;quot;,  &amp;quot;Mathews&amp;quot;,4789,&amp;quot;2003-07-21&amp;quot;,&amp;quot;South&amp;quot;,&amp;quot;Utown&amp;quot;,4);&lt;br /&gt;
2&amp;gt; GO&lt;br /&gt;
(1 rows affected)&lt;br /&gt;
1&amp;gt; INSERT INTO employee VALUES (3, &amp;quot;James&amp;quot; ,  &amp;quot;Smith&amp;quot;,  6678,&amp;quot;2001-12-01&amp;quot;,&amp;quot;North&amp;quot;,&amp;quot;Paris&amp;quot;,5);&lt;br /&gt;
2&amp;gt; GO&lt;br /&gt;
(1 rows affected)&lt;br /&gt;
1&amp;gt; INSERT INTO employee VALUES (4, &amp;quot;Celia&amp;quot; ,  &amp;quot;Rice&amp;quot;,   5567,&amp;quot;2006-03-03&amp;quot;,&amp;quot;South&amp;quot;,&amp;quot;London&amp;quot;,6);&lt;br /&gt;
2&amp;gt; GO&lt;br /&gt;
(1 rows affected)&lt;br /&gt;
1&amp;gt; INSERT INTO employee VALUES (5, &amp;quot;Robert&amp;quot;,  &amp;quot;Black&amp;quot;,  4467,&amp;quot;2004-07-02&amp;quot;,&amp;quot;East&amp;quot;,&amp;quot;Newton&amp;quot;,7);&lt;br /&gt;
2&amp;gt; GO&lt;br /&gt;
(1 rows affected)&lt;br /&gt;
1&amp;gt; INSERT INTO employee VALUES (6, &amp;quot;Linda&amp;quot; ,  &amp;quot;Green&amp;quot; , 6456,&amp;quot;2002-05-19&amp;quot;,&amp;quot;East&amp;quot;,&amp;quot;Calgary&amp;quot;,8);&lt;br /&gt;
2&amp;gt; GO&lt;br /&gt;
(1 rows affected)&lt;br /&gt;
1&amp;gt; INSERT INTO employee VALUES (7, &amp;quot;David&amp;quot; ,  &amp;quot;Larry&amp;quot;,  5345,&amp;quot;2008-03-18&amp;quot;,&amp;quot;West&amp;quot;,&amp;quot;New York&amp;quot;,9);&lt;br /&gt;
2&amp;gt; GO&lt;br /&gt;
(1 rows affected)&lt;br /&gt;
1&amp;gt; INSERT INTO employee VALUES (8, &amp;quot;James&amp;quot; ,  &amp;quot;Cat&amp;quot;,    4234,&amp;quot;2007-07-17&amp;quot;,&amp;quot;West&amp;quot;,&amp;quot;Regina&amp;quot;,9);&lt;br /&gt;
2&amp;gt; GO&lt;br /&gt;
(1 rows affected)&lt;br /&gt;
1&amp;gt; INSERT INTO employee VALUES (9, &amp;quot;Joan&amp;quot;  ,  &amp;quot;Act&amp;quot;,    6123,&amp;quot;2001-04-16&amp;quot;,&amp;quot;North&amp;quot;,&amp;quot;Toronto&amp;quot;,10);&lt;br /&gt;
2&amp;gt; GO&lt;br /&gt;
(1 rows affected)&lt;br /&gt;
1&amp;gt;&lt;br /&gt;
2&amp;gt; select * from employee;&lt;br /&gt;
3&amp;gt; GO&lt;br /&gt;
id          first_name last_name  salary       start_Date              region     city                 managerid&lt;br /&gt;
----------- ---------- ---------- ------------ ----------------------- ---------- -------------------- -----------&lt;br /&gt;
          1 Jason      Martin          5890.00 2005-03-22 00:00:00.000 North      Vancouver                      3&lt;br /&gt;
          2 Alison     Mathews         4789.00 2003-07-21 00:00:00.000 South      Utown                          4&lt;br /&gt;
          3 James      Smith           6678.00 2001-12-01 00:00:00.000 North      Paris                          5&lt;br /&gt;
          4 Celia      Rice            5567.00 2006-03-03 00:00:00.000 South      London                         6&lt;br /&gt;
          5 Robert     Black           4467.00 2004-07-02 00:00:00.000 East       Newton                         7&lt;br /&gt;
          6 Linda      Green           6456.00 2002-05-19 00:00:00.000 East       Calgary                        8&lt;br /&gt;
          7 David      Larry           5345.00 2008-03-18 00:00:00.000 West       New York                       9&lt;br /&gt;
          8 James      Cat             4234.00 2007-07-17 00:00:00.000 West       Regina                         9&lt;br /&gt;
          9 Joan       Act             6123.00 2001-04-16 00:00:00.000 North      Toronto                       10&lt;br /&gt;
(9 rows affected)&lt;br /&gt;
1&amp;gt;&lt;br /&gt;
2&amp;gt; CREATE PROCEDURE dbo.usp_employee&lt;br /&gt;
3&amp;gt; @Name nvarchar(50),&lt;br /&gt;
4&amp;gt; @DeptCount int OUTPUT&lt;br /&gt;
5&amp;gt; AS&lt;br /&gt;
6&amp;gt; SELECT first_Name&lt;br /&gt;
7&amp;gt; FROM employee&lt;br /&gt;
8&amp;gt;  WHERE city = @Name&lt;br /&gt;
9&amp;gt; SELECT @DeptCount = @@ROWCOUNT&lt;br /&gt;
10&amp;gt; GO&lt;br /&gt;
1&amp;gt;&lt;br /&gt;
2&amp;gt; DECLARE @DeptCount int&lt;br /&gt;
3&amp;gt; EXEC dbo.usp_employee &amp;quot;Vancouver&amp;quot;,&lt;br /&gt;
4&amp;gt; @DeptCount OUTPUT&lt;br /&gt;
5&amp;gt; PRINT @DeptCount&lt;br /&gt;
6&amp;gt; GO&lt;br /&gt;
first_Name&lt;br /&gt;
----------&lt;br /&gt;
Jason&lt;br /&gt;
(1 rows affected)&lt;br /&gt;
1&lt;br /&gt;
1&amp;gt;&lt;br /&gt;
2&amp;gt; ALTER PROCEDURE dbo.usp_employee&lt;br /&gt;
3&amp;gt; @GroupName nvarchar(50)&lt;br /&gt;
4&amp;gt; AS&lt;br /&gt;
5&amp;gt; SELECT first_name&lt;br /&gt;
6&amp;gt; FROM Employee&lt;br /&gt;
7&amp;gt; WHERE city = @GroupName&lt;br /&gt;
8&amp;gt; SELECT @@ROWCOUNT DepartmentCount&lt;br /&gt;
9&amp;gt; GO&lt;br /&gt;
1&amp;gt;&lt;br /&gt;
2&amp;gt; EXEC dbo.usp_Employee &amp;quot;Research and Development&amp;quot;&lt;br /&gt;
3&amp;gt;&lt;br /&gt;
4&amp;gt;&lt;br /&gt;
5&amp;gt; drop procedure dbo.usp_Employee&lt;br /&gt;
6&amp;gt; GO&lt;br /&gt;
first_name&lt;br /&gt;
----------&lt;br /&gt;
(0 rows affected)&lt;br /&gt;
DepartmentCount&lt;br /&gt;
---------------&lt;br /&gt;
              0&lt;br /&gt;
(1 rows affected)&lt;br /&gt;
1&amp;gt; drop table employee;&lt;br /&gt;
2&amp;gt; GO&lt;br /&gt;
1&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
== Define variables in a trigger==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
4&amp;gt; CREATE TABLE employee&lt;br /&gt;
5&amp;gt; (&lt;br /&gt;
6&amp;gt;    emp_id         varchar(20),&lt;br /&gt;
7&amp;gt;    fname          varchar(20)       NOT NULL,&lt;br /&gt;
8&amp;gt;    minit          char(1)               NULL,&lt;br /&gt;
9&amp;gt;    lname          varchar(30)       NOT NULL,&lt;br /&gt;
10&amp;gt;    job_id         smallint          NOT NULL       DEFAULT 1,&lt;br /&gt;
11&amp;gt;    job_lvl        tinyint                          DEFAULT 10,&lt;br /&gt;
12&amp;gt;    pub_id         char(4)           NOT NULL       DEFAULT (&amp;quot;9952&amp;quot;),&lt;br /&gt;
13&amp;gt;    hire_date      datetime          NOT NULL       DEFAULT (getdate())&lt;br /&gt;
14&amp;gt; )&lt;br /&gt;
15&amp;gt; GO&lt;br /&gt;
1&amp;gt;&lt;br /&gt;
2&amp;gt; insert employee values (&amp;quot;1&amp;quot;, &amp;quot;Jack&amp;quot;, &amp;quot;T&amp;quot;, &amp;quot;Lee&amp;quot;,     2, 215, &amp;quot;9952&amp;quot;, &amp;quot;11/11/89&amp;quot;)&lt;br /&gt;
3&amp;gt; insert employee values (&amp;quot;2&amp;quot;, &amp;quot;Jode&amp;quot;, &amp;quot;M&amp;quot;, &amp;quot;Devon&amp;quot;,   3, 200, &amp;quot;9952&amp;quot;, &amp;quot;07/16/91&amp;quot;)&lt;br /&gt;
4&amp;gt; insert employee values (&amp;quot;3&amp;quot;, &amp;quot;Frac&amp;quot;, &amp;quot;F&amp;quot;, &amp;quot;Chang&amp;quot;,   4, 227, &amp;quot;9952&amp;quot;, &amp;quot;11/03/90&amp;quot;)&lt;br /&gt;
5&amp;gt; insert employee values (&amp;quot;4&amp;quot;, &amp;quot;Like&amp;quot;, &amp;quot;A&amp;quot;, &amp;quot;Lebihan&amp;quot;, 5, 175, &amp;quot;0736&amp;quot;, &amp;quot;06/03/90&amp;quot;)&lt;br /&gt;
6&amp;gt; insert employee values (&amp;quot;5&amp;quot;, &amp;quot;Paul&amp;quot;, &amp;quot;X&amp;quot;, &amp;quot;Henriot&amp;quot;, 5, 159, &amp;quot;0877&amp;quot;, &amp;quot;08/19/93&amp;quot;)&lt;br /&gt;
7&amp;gt; insert employee values (&amp;quot;6&amp;quot;, &amp;quot;Sick&amp;quot;, &amp;quot;K&amp;quot;, &amp;quot;Ottlieb&amp;quot;, 5, 150, &amp;quot;1389&amp;quot;, &amp;quot;04/05/91&amp;quot;)&lt;br /&gt;
8&amp;gt; insert employee values (&amp;quot;7&amp;quot;, &amp;quot;Rita&amp;quot;, &amp;quot;B&amp;quot;, &amp;quot;Muller&amp;quot;,  5, 198, &amp;quot;1622&amp;quot;, &amp;quot;10/09/93&amp;quot;)&lt;br /&gt;
9&amp;gt; insert employee values (&amp;quot;8&amp;quot;, &amp;quot;Mary&amp;quot;, &amp;quot;J&amp;quot;, &amp;quot;Pontes&amp;quot;,  5, 246, &amp;quot;1756&amp;quot;, &amp;quot;03/01/89&amp;quot;)&lt;br /&gt;
10&amp;gt; insert employee values (&amp;quot;9&amp;quot;, &amp;quot;Jane&amp;quot;, &amp;quot;Y&amp;quot;, &amp;quot;Labrune&amp;quot;, 5, 172, &amp;quot;9901&amp;quot;, &amp;quot;05/26/91&amp;quot;)&lt;br /&gt;
11&amp;gt; insert employee values (&amp;quot;10&amp;quot;,&amp;quot;Carl&amp;quot;, &amp;quot;F&amp;quot;, &amp;quot;Hernadez&amp;quot;,5, 211, &amp;quot;9999&amp;quot;, &amp;quot;04/21/89&amp;quot;)&lt;br /&gt;
12&amp;gt; GO&lt;br /&gt;
(1 rows affected)&lt;br /&gt;
(1 rows affected)&lt;br /&gt;
(1 rows affected)&lt;br /&gt;
(1 rows affected)&lt;br /&gt;
(1 rows affected)&lt;br /&gt;
(1 rows affected)&lt;br /&gt;
(1 rows affected)&lt;br /&gt;
(1 rows affected)&lt;br /&gt;
(1 rows affected)&lt;br /&gt;
(1 rows affected)&lt;br /&gt;
1&amp;gt;&lt;br /&gt;
2&amp;gt; CREATE TABLE jobs(&lt;br /&gt;
3&amp;gt;    job_id         smallint          IDENTITY(1,1) PRIMARY KEY CLUSTERED,&lt;br /&gt;
4&amp;gt;    job_desc       varchar(50)       NOT NULL      DEFAULT &amp;quot;New Position - title not formalized yet&amp;quot;,&lt;br /&gt;
5&amp;gt;    min_lvl        tinyint           NOT NULL      CHECK (min_lvl &amp;gt;= 10),&lt;br /&gt;
6&amp;gt;    max_lvl        tinyint           NOT NULL      CHECK (max_lvl &amp;lt;= 250)&lt;br /&gt;
7&amp;gt; )&lt;br /&gt;
8&amp;gt; GO&lt;br /&gt;
1&amp;gt;&lt;br /&gt;
2&amp;gt;&lt;br /&gt;
3&amp;gt; insert jobs values (&amp;quot;Coder&amp;quot;,          10,  10)&lt;br /&gt;
4&amp;gt; insert jobs values (&amp;quot;Tester&amp;quot;,         200, 250)&lt;br /&gt;
5&amp;gt; insert jobs values (&amp;quot;Programmer&amp;quot;,     175, 225)&lt;br /&gt;
6&amp;gt; insert jobs values (&amp;quot;Painter&amp;quot;,        175, 250)&lt;br /&gt;
7&amp;gt; insert jobs values (&amp;quot;Drawer&amp;quot;,         150, 250)&lt;br /&gt;
8&amp;gt; insert jobs values (&amp;quot;Editor&amp;quot;,         140, 225)&lt;br /&gt;
9&amp;gt; insert jobs values (&amp;quot;Manager&amp;quot;,        120, 200)&lt;br /&gt;
10&amp;gt; insert jobs values (&amp;quot;Manager&amp;quot;,        100, 175)&lt;br /&gt;
11&amp;gt; insert jobs values (&amp;quot;Representative&amp;quot;, 25,  100)&lt;br /&gt;
12&amp;gt; insert jobs values (&amp;quot;Designer&amp;quot;,       25,  100)&lt;br /&gt;
13&amp;gt;&lt;br /&gt;
14&amp;gt; GO&lt;br /&gt;
(1 rows affected)&lt;br /&gt;
(1 rows affected)&lt;br /&gt;
(1 rows affected)&lt;br /&gt;
(1 rows affected)&lt;br /&gt;
(1 rows affected)&lt;br /&gt;
(1 rows affected)&lt;br /&gt;
(1 rows affected)&lt;br /&gt;
(1 rows affected)&lt;br /&gt;
(1 rows affected)&lt;br /&gt;
(1 rows affected)&lt;br /&gt;
1&amp;gt;&lt;br /&gt;
2&amp;gt; CREATE TRIGGER employee_insupd&lt;br /&gt;
3&amp;gt; ON employee&lt;br /&gt;
4&amp;gt; FOR insert, UPDATE&lt;br /&gt;
5&amp;gt; AS&lt;br /&gt;
6&amp;gt; &lt;br /&gt;
7&amp;gt; declare @min_lvl tinyint, @max_lvl tinyint, @emp_lvl tinyint, @job_id smallint&lt;br /&gt;
8&amp;gt;   select @min_lvl = min_lvl, @max_lvl = max_lvl, @emp_lvl = i.job_lvl, @job_id = i.job_id&lt;br /&gt;
9&amp;gt; from employee e, jobs j, inserted i&lt;br /&gt;
10&amp;gt; where e.emp_id = i.emp_id AND i.job_id = j.job_id&lt;br /&gt;
11&amp;gt; IF (@job_id = 1) and (@emp_lvl &amp;lt;&amp;gt; 10)&lt;br /&gt;
12&amp;gt; begin&lt;br /&gt;
13&amp;gt;    raiserror (&amp;quot;Job id 1 expects the default level of 10.&amp;quot;,16,1)&lt;br /&gt;
14&amp;gt;    ROLLBACK TRANSACTION&lt;br /&gt;
15&amp;gt; end&lt;br /&gt;
16&amp;gt; ELSE&lt;br /&gt;
17&amp;gt; IF NOT (@emp_lvl BETWEEN @min_lvl AND @max_lvl)&lt;br /&gt;
18&amp;gt; begin&lt;br /&gt;
19&amp;gt;    raiserror (&amp;quot;The level for job_id:%d should be between %d and %d.&amp;quot;,&lt;br /&gt;
20&amp;gt;       16, 1, @job_id, @min_lvl, @max_lvl)&lt;br /&gt;
21&amp;gt;    ROLLBACK TRANSACTION&lt;br /&gt;
22&amp;gt; end&lt;br /&gt;
23&amp;gt;&lt;br /&gt;
24&amp;gt; GO&lt;br /&gt;
1&amp;gt;&lt;br /&gt;
2&amp;gt; drop table employee;&lt;br /&gt;
3&amp;gt; drop table jobs;&lt;br /&gt;
4&amp;gt; GO&lt;br /&gt;
1&amp;gt;&lt;br /&gt;
2&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
== Disable a trigger==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
4&amp;gt; create table Billings (&lt;br /&gt;
5&amp;gt;     BankerID           INTEGER,&lt;br /&gt;
6&amp;gt;     BillingNumber      INTEGER,&lt;br /&gt;
7&amp;gt;     BillingDate        datetime,&lt;br /&gt;
8&amp;gt;     BillingTotal       INTEGER,&lt;br /&gt;
9&amp;gt;     TermsID            INTEGER,&lt;br /&gt;
10&amp;gt;     BillingDueDate     datetime ,&lt;br /&gt;
11&amp;gt;     PaymentTotal       INTEGER,&lt;br /&gt;
12&amp;gt;     CreditTotal        INTEGER&lt;br /&gt;
13&amp;gt;&lt;br /&gt;
14&amp;gt; );&lt;br /&gt;
15&amp;gt; GO&lt;br /&gt;
1&amp;gt;&lt;br /&gt;
2&amp;gt; INSERT INTO Billings VALUES (1, 1, &amp;quot;2005-01-22&amp;quot;, 165, 1,&amp;quot;2005-04-22&amp;quot;,123,321);&lt;br /&gt;
3&amp;gt; GO&lt;br /&gt;
(1 rows affected)&lt;br /&gt;
1&amp;gt; INSERT INTO Billings VALUES (2, 2, &amp;quot;2001-02-21&amp;quot;, 165, 1,&amp;quot;2002-02-22&amp;quot;,123,321.);&lt;br /&gt;
2&amp;gt; GO&lt;br /&gt;
(1 rows affected)&lt;br /&gt;
1&amp;gt;&lt;br /&gt;
2&amp;gt; CREATE TRIGGER tr_Insert_Rollback&lt;br /&gt;
3&amp;gt; ON Billings&lt;br /&gt;
4&amp;gt; FOR INSERT&lt;br /&gt;
5&amp;gt; AS&lt;br /&gt;
6&amp;gt; ROLLBACK TRAN&lt;br /&gt;
7&amp;gt; PRINT &amp;quot;INSERT statement rolled back.&amp;quot;&lt;br /&gt;
8&amp;gt; GO&lt;br /&gt;
1&amp;gt;&lt;br /&gt;
2&amp;gt;&lt;br /&gt;
3&amp;gt; DISABLE TRIGGER tr_Insert_Rollback ON Billings&lt;br /&gt;
4&amp;gt; GO&lt;br /&gt;
1&amp;gt;&lt;br /&gt;
2&amp;gt;&lt;br /&gt;
3&amp;gt; drop TRIGGER tr_Insert_Rollback;&lt;br /&gt;
4&amp;gt; GO&lt;br /&gt;
1&amp;gt;&lt;br /&gt;
2&amp;gt; drop table Billings;&lt;br /&gt;
3&amp;gt; GO&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
== Enable a trigger==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
3&amp;gt; create table Billings (&lt;br /&gt;
4&amp;gt;     BankerID           INTEGER,&lt;br /&gt;
5&amp;gt;     BillingNumber      INTEGER,&lt;br /&gt;
6&amp;gt;     BillingDate        datetime,&lt;br /&gt;
7&amp;gt;     BillingTotal       INTEGER,&lt;br /&gt;
8&amp;gt;     TermsID            INTEGER,&lt;br /&gt;
9&amp;gt;     BillingDueDate     datetime ,&lt;br /&gt;
10&amp;gt;     PaymentTotal       INTEGER,&lt;br /&gt;
11&amp;gt;     CreditTotal        INTEGER&lt;br /&gt;
12&amp;gt;&lt;br /&gt;
13&amp;gt; );&lt;br /&gt;
14&amp;gt; GO&lt;br /&gt;
1&amp;gt;&lt;br /&gt;
2&amp;gt; INSERT INTO Billings VALUES (1, 1, &amp;quot;2005-01-22&amp;quot;, 165, 1,&amp;quot;2005-04-22&amp;quot;,123,321);&lt;br /&gt;
3&amp;gt; GO&lt;br /&gt;
(1 rows affected)&lt;br /&gt;
1&amp;gt; INSERT INTO Billings VALUES (2, 2, &amp;quot;2001-02-21&amp;quot;, 165, 1,&amp;quot;2002-02-22&amp;quot;,123,321.);&lt;br /&gt;
2&amp;gt; GO&lt;br /&gt;
(1 rows affected)&lt;br /&gt;
1&amp;gt;&lt;br /&gt;
2&amp;gt; CREATE TRIGGER tr_Insert_Rollback&lt;br /&gt;
3&amp;gt; ON Billings&lt;br /&gt;
4&amp;gt; FOR INSERT&lt;br /&gt;
5&amp;gt; AS&lt;br /&gt;
6&amp;gt; ROLLBACK TRAN&lt;br /&gt;
7&amp;gt; PRINT &amp;quot;INSERT statement rolled back.&amp;quot;&lt;br /&gt;
8&amp;gt; GO&lt;br /&gt;
1&amp;gt;&lt;br /&gt;
2&amp;gt; ENABLE TRIGGER tr_Insert_Rollback ON Billings&lt;br /&gt;
3&amp;gt; GO&lt;br /&gt;
1&amp;gt; drop TRIGGER tr_Insert_Rollback;&lt;br /&gt;
2&amp;gt; GO&lt;br /&gt;
1&amp;gt;&lt;br /&gt;
2&amp;gt; drop table Billings;&lt;br /&gt;
3&amp;gt; GO&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
== exits if the price column has not been updated.==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
3&amp;gt;&lt;br /&gt;
4&amp;gt; CREATE TABLE titles(&lt;br /&gt;
5&amp;gt;    title_id       varchar(20),&lt;br /&gt;
6&amp;gt;    title          varchar(80)       NOT NULL,&lt;br /&gt;
7&amp;gt;    type           char(12)          NOT NULL,&lt;br /&gt;
8&amp;gt;    pub_id         char(4)               NULL,&lt;br /&gt;
9&amp;gt;    price          money                 NULL,&lt;br /&gt;
10&amp;gt;    advance        money                 NULL,&lt;br /&gt;
11&amp;gt;    royalty        int                   NULL,&lt;br /&gt;
12&amp;gt;    ytd_sales      int                   NULL,&lt;br /&gt;
13&amp;gt;    notes          varchar(200)          NULL,&lt;br /&gt;
14&amp;gt;    pubdate        datetime          NOT NULL&lt;br /&gt;
15&amp;gt; )&lt;br /&gt;
16&amp;gt; GO&lt;br /&gt;
1&amp;gt;&lt;br /&gt;
2&amp;gt; insert titles values (&amp;quot;1&amp;quot;, &amp;quot;Secrets&amp;quot;,   &amp;quot;popular_comp&amp;quot;, &amp;quot;1389&amp;quot;, $20.00, $8000.00, 10, 4095,&amp;quot;Note 1&amp;quot;,&amp;quot;06/12/94&amp;quot;)&lt;br /&gt;
3&amp;gt; insert titles values (&amp;quot;2&amp;quot;, &amp;quot;The&amp;quot;,       &amp;quot;business&amp;quot;,     &amp;quot;1389&amp;quot;, $19.99, $5000.00, 10, 4095,&amp;quot;Note 2&amp;quot;,&amp;quot;06/12/91&amp;quot;)&lt;br /&gt;
4&amp;gt; insert titles values (&amp;quot;3&amp;quot;, &amp;quot;Emotional&amp;quot;, &amp;quot;psychology&amp;quot;,   &amp;quot;0736&amp;quot;, $7.99,  $4000.00, 10, 3336,&amp;quot;Note 3&amp;quot;,&amp;quot;06/12/91&amp;quot;)&lt;br /&gt;
5&amp;gt; insert titles values (&amp;quot;4&amp;quot;, &amp;quot;Prolonged&amp;quot;, &amp;quot;psychology&amp;quot;,   &amp;quot;0736&amp;quot;, $19.99, $2000.00, 10, 4072,&amp;quot;Note 4&amp;quot;,&amp;quot;06/12/91&amp;quot;)&lt;br /&gt;
6&amp;gt; insert titles values (&amp;quot;5&amp;quot;, &amp;quot;With&amp;quot;,      &amp;quot;business&amp;quot;,     &amp;quot;1389&amp;quot;, $11.95, $5000.00, 10, 3876,&amp;quot;Note 5&amp;quot;,&amp;quot;06/09/91&amp;quot;)&lt;br /&gt;
7&amp;gt; insert titles values (&amp;quot;6&amp;quot;, &amp;quot;Valley&amp;quot;,    &amp;quot;mod_cook&amp;quot;,     &amp;quot;0877&amp;quot;, $19.99, $0.00,    12, 2032,&amp;quot;Note 6&amp;quot;,&amp;quot;06/09/91&amp;quot;)&lt;br /&gt;
8&amp;gt; insert titles values (&amp;quot;7&amp;quot;, &amp;quot;Any?&amp;quot;,      &amp;quot;trad_cook&amp;quot;,    &amp;quot;0877&amp;quot;, $14.99, $8000.00, 10, 4095,&amp;quot;Note 7&amp;quot;,&amp;quot;06/12/91&amp;quot;)&lt;br /&gt;
9&amp;gt; insert titles values (&amp;quot;8&amp;quot;, &amp;quot;Fifty&amp;quot;,     &amp;quot;trad_cook&amp;quot;,    &amp;quot;0877&amp;quot;, $11.95, $4000.00, 14, 1509,&amp;quot;Note 8&amp;quot;,&amp;quot;06/12/91&amp;quot;)&lt;br /&gt;
10&amp;gt; GO&lt;br /&gt;
(1 rows affected)&lt;br /&gt;
(1 rows affected)&lt;br /&gt;
(1 rows affected)&lt;br /&gt;
(1 rows affected)&lt;br /&gt;
(1 rows affected)&lt;br /&gt;
(1 rows affected)&lt;br /&gt;
(1 rows affected)&lt;br /&gt;
(1 rows affected)&lt;br /&gt;
1&amp;gt;&lt;br /&gt;
2&amp;gt;     CREATE TRIGGER myTrigger ON titles&lt;br /&gt;
3&amp;gt;     FOR UPDATE&lt;br /&gt;
4&amp;gt;     AS&lt;br /&gt;
5&amp;gt;     DECLARE @chvMsg VARCHAR(255),&lt;br /&gt;
6&amp;gt;         @chvTitleID VARCHAR(6),&lt;br /&gt;
7&amp;gt;         @mnyOldPrice MONEY,&lt;br /&gt;
8&amp;gt;         @mnyNewPrice MONEY&lt;br /&gt;
9&amp;gt;     DECLARE myCursor CURSOR&lt;br /&gt;
10&amp;gt;          FOR&lt;br /&gt;
11&amp;gt;          SELECT d.title_id, d.price, i.price&lt;br /&gt;
12&amp;gt;          FROM deleted d INNER JOIN inserted i ON d.title_id = i.title_id&lt;br /&gt;
13&amp;gt;      IF update(price)&lt;br /&gt;
14&amp;gt;          BEGIN&lt;br /&gt;
15&amp;gt;              OPEN myCursor&lt;br /&gt;
16&amp;gt;              FETCH NEXT FROM myCursor INTO&lt;br /&gt;
17&amp;gt;                  @chvTitleID, @mnyOldPrice, @mnyNewPrice&lt;br /&gt;
18&amp;gt;              WHILE (@@fetch_status &amp;lt;&amp;gt; -1)&lt;br /&gt;
19&amp;gt;                  BEGIN&lt;br /&gt;
20&amp;gt;                      SELECT @chvMsg = &amp;quot;The price of title &amp;quot; + @chvTitleID&lt;br /&gt;
21&amp;gt;                              + &amp;quot; has changed from&amp;quot;&lt;br /&gt;
22&amp;gt;                              + &amp;quot; &amp;quot; + CONVERT(VARCHAR(10), @mnyOldPrice)&lt;br /&gt;
23&amp;gt;                              + &amp;quot; to &amp;quot; + CONVERT(VARCHAR(10), @mnyNewPrice)&lt;br /&gt;
24&amp;gt;                              + &amp;quot; on &amp;quot; +&lt;br /&gt;
25&amp;gt;      CONVERT(VARCHAR(30), getdate()) + &amp;quot;.&amp;quot;EXEC master..xp_sendmail &amp;quot;Colleen&amp;quot;, @chvMsg&lt;br /&gt;
26&amp;gt;      FETCH NEXT FROM myCursor&lt;br /&gt;
27&amp;gt;                          INTO @chvTitleID, @mnyOldPrice, @mnyNewPrice&lt;br /&gt;
28&amp;gt;                      SELECT @chvMsg = &amp;quot;&amp;quot;&lt;br /&gt;
29&amp;gt;                  END&lt;br /&gt;
30&amp;gt;          DEALLOCATE myCursor&lt;br /&gt;
31&amp;gt;          END&lt;br /&gt;
32&amp;gt;      RETURN&lt;br /&gt;
33&amp;gt;      GO&lt;br /&gt;
1&amp;gt;&lt;br /&gt;
2&amp;gt;      drop trigger myTrigger;&lt;br /&gt;
3&amp;gt;      GO&lt;br /&gt;
1&amp;gt;&lt;br /&gt;
2&amp;gt;      drop table titles;&lt;br /&gt;
3&amp;gt;      GO&lt;br /&gt;
1&amp;gt;&lt;br /&gt;
2&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
== INSTEAD OF INSERT trigger for a table==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
2&amp;gt; CREATE TABLE MyTable(&lt;br /&gt;
3&amp;gt;   ID    int      NOT NULL PRIMARY KEY,&lt;br /&gt;
4&amp;gt;   Descr char (5) NOT NULL&lt;br /&gt;
5&amp;gt; )&lt;br /&gt;
6&amp;gt; GO&lt;br /&gt;
1&amp;gt; CREATE TRIGGER tri_MyTable ON MyTable INSTEAD OF INSERT&lt;br /&gt;
2&amp;gt; AS&lt;br /&gt;
3&amp;gt; IF @@ROWCOUNT = 0&lt;br /&gt;
4&amp;gt;   RETURN&lt;br /&gt;
5&amp;gt; UPDATE F             -- rows that already exist&lt;br /&gt;
6&amp;gt; SET&lt;br /&gt;
7&amp;gt;   Descr = I.Descr&lt;br /&gt;
8&amp;gt; FROM&lt;br /&gt;
9&amp;gt;     inserted   AS I&lt;br /&gt;
10&amp;gt;   JOIN&lt;br /&gt;
11&amp;gt;     MyTable AS F ON F.ID = I.ID&lt;br /&gt;
12&amp;gt; INSERT MyTable    -- new rows&lt;br /&gt;
13&amp;gt; SELECT&lt;br /&gt;
14&amp;gt;   ID,&lt;br /&gt;
15&amp;gt;   Descr&lt;br /&gt;
16&amp;gt; FROM&lt;br /&gt;
17&amp;gt;     inserted AS I&lt;br /&gt;
18&amp;gt; WHERE NOT EXISTS&lt;br /&gt;
19&amp;gt; (&lt;br /&gt;
20&amp;gt;   SELECT&lt;br /&gt;
21&amp;gt;     *&lt;br /&gt;
22&amp;gt;   FROM&lt;br /&gt;
23&amp;gt;       MyTable AS F&lt;br /&gt;
24&amp;gt;   WHERE&lt;br /&gt;
25&amp;gt;       F.ID = I.ID&lt;br /&gt;
26&amp;gt; )&lt;br /&gt;
27&amp;gt; GO&lt;br /&gt;
1&amp;gt; INSERT MyTable (ID, Descr) VALUES (1, &amp;quot;a&amp;quot;)&lt;br /&gt;
2&amp;gt; INSERT MyTable (ID, Descr) VALUES (2, &amp;quot;b&amp;quot;)&lt;br /&gt;
3&amp;gt; INSERT MyTable (ID, Descr) VALUES (3, &amp;quot;c&amp;quot;)&lt;br /&gt;
4&amp;gt; INSERT MyTable (ID, Descr) VALUES (1, &amp;quot;d&amp;quot;)&lt;br /&gt;
5&amp;gt; INSERT MyTable (ID, Descr) VALUES (1, &amp;quot;e&amp;quot;)&lt;br /&gt;
6&amp;gt;&lt;br /&gt;
7&amp;gt; drop table MyTable&lt;br /&gt;
8&amp;gt; GO&lt;br /&gt;
(0 rows affected)&lt;br /&gt;
(1 rows affected)&lt;br /&gt;
(0 rows affected)&lt;br /&gt;
(1 rows affected)&lt;br /&gt;
(0 rows affected)&lt;br /&gt;
(1 rows affected)&lt;br /&gt;
(1 rows affected)&lt;br /&gt;
(1 rows affected)&lt;br /&gt;
(1 rows affected)&lt;br /&gt;
(1 rows affected)&lt;br /&gt;
1&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
== RAISERROR in trigger==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
5&amp;gt;&lt;br /&gt;
6&amp;gt; CREATE TABLE Products (&lt;br /&gt;
7&amp;gt;      ProductID int NOT NULL ,&lt;br /&gt;
8&amp;gt;      ProductName nvarchar (40) NOT NULL ,&lt;br /&gt;
9&amp;gt;      SupplierID int NULL ,&lt;br /&gt;
10&amp;gt;     CategoryID int NULL ,&lt;br /&gt;
11&amp;gt;     QuantityPerUnit nvarchar (20) NULL ,&lt;br /&gt;
12&amp;gt;     UnitPrice money NULL,&lt;br /&gt;
13&amp;gt;     UnitsInStock smallint NULL,&lt;br /&gt;
14&amp;gt;     UnitsOnOrder smallint NULL,&lt;br /&gt;
15&amp;gt;     ReorderLevel smallint NULL,&lt;br /&gt;
16&amp;gt;     Discontinued bit NOT NULL&lt;br /&gt;
17&amp;gt; )&lt;br /&gt;
18&amp;gt; GO&lt;br /&gt;
1&amp;gt; INSERT Products VALUES(1,&amp;quot;F&amp;quot;,15,4,&amp;quot;10 - 999 g pkgs.&amp;quot;,61.5,66,6,6,6)&lt;br /&gt;
2&amp;gt; INSERT Products VALUES(2,&amp;quot;M&amp;quot;,14,4,&amp;quot;24 - 888 g pkgs.&amp;quot;,34.8,74,7,7,7)&lt;br /&gt;
3&amp;gt; INSERT Products VALUES(3,&amp;quot;R&amp;quot;,17,8,&amp;quot;24 - 777 g jars&amp;quot;,17,171,0,5,0)&lt;br /&gt;
4&amp;gt; INSERT Products VALUES(4,&amp;quot;L&amp;quot;,4,7,&amp;quot;5 kg pkg.&amp;quot;,10,4,20,5,0)&lt;br /&gt;
5&amp;gt; INSERT Products VALUES(5,&amp;quot;R&amp;quot;,12,1,&amp;quot;24 - 0.5 l bottles&amp;quot;,1.23,445,0,25,0)&lt;br /&gt;
6&amp;gt; INSERT Products VALUES(6,&amp;quot;L&amp;quot;,23,1,&amp;quot;500 ml&amp;quot;,18,57,1,20,0)&lt;br /&gt;
7&amp;gt; INSERT Products VALUES(7,&amp;quot;O&amp;quot;,12,2,&amp;quot;12 boxes&amp;quot;,13,23,0,15,0)&lt;br /&gt;
8&amp;gt; go&lt;br /&gt;
(1 rows affected)&lt;br /&gt;
(1 rows affected)&lt;br /&gt;
(1 rows affected)&lt;br /&gt;
(1 rows affected)&lt;br /&gt;
(1 rows affected)&lt;br /&gt;
(1 rows affected)&lt;br /&gt;
(1 rows affected)&lt;br /&gt;
1&amp;gt;&lt;br /&gt;
2&amp;gt;    create TRIGGER ProductIsRationed&lt;br /&gt;
3&amp;gt;       ON Products&lt;br /&gt;
4&amp;gt;       FOR UPDATE&lt;br /&gt;
5&amp;gt;    AS&lt;br /&gt;
6&amp;gt;       IF UPDATE(UnitsInStock)&lt;br /&gt;
7&amp;gt;       BEGIN&lt;br /&gt;
8&amp;gt;       IF EXISTS&lt;br /&gt;
9&amp;gt;          (&lt;br /&gt;
10&amp;gt;           SELECT &amp;quot;True&amp;quot;&lt;br /&gt;
11&amp;gt;           FROM Inserted i&lt;br /&gt;
12&amp;gt;           JOIN Deleted d&lt;br /&gt;
13&amp;gt;              ON i.ProductID = d.ProductID&lt;br /&gt;
14&amp;gt;           WHERE (d.UnitsInStock - i.UnitsInStock) &amp;gt; d.UnitsInStock / 2&lt;br /&gt;
15&amp;gt;              AND d.UnitsInStock - i.UnitsInStock &amp;gt; 0&lt;br /&gt;
16&amp;gt;          )&lt;br /&gt;
17&amp;gt;       BEGIN&lt;br /&gt;
18&amp;gt;          RAISERROR(&amp;quot;Cannot reduce stock by more than 50%% at once.&amp;quot;,16,1)&lt;br /&gt;
19&amp;gt;          ROLLBACK TRAN&lt;br /&gt;
20&amp;gt;       END&lt;br /&gt;
21&amp;gt;       END&lt;br /&gt;
22&amp;gt; GO&lt;br /&gt;
1&amp;gt;&lt;br /&gt;
2&amp;gt; drop TRIGGER ProductIsRationed;&lt;br /&gt;
3&amp;gt; GO&lt;br /&gt;
1&amp;gt;&lt;br /&gt;
2&amp;gt; drop table Products;&lt;br /&gt;
3&amp;gt; GO&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
== Rollback transaction in a trigger==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
5&amp;gt;&lt;br /&gt;
6&amp;gt; CREATE TABLE Products (&lt;br /&gt;
7&amp;gt;      ProductID int NOT NULL ,&lt;br /&gt;
8&amp;gt;      ProductName nvarchar (40) NOT NULL ,&lt;br /&gt;
9&amp;gt;      SupplierID int NULL ,&lt;br /&gt;
10&amp;gt;     CategoryID int NULL ,&lt;br /&gt;
11&amp;gt;     QuantityPerUnit nvarchar (20) NULL ,&lt;br /&gt;
12&amp;gt;     UnitPrice money NULL,&lt;br /&gt;
13&amp;gt;     UnitsInStock smallint NULL,&lt;br /&gt;
14&amp;gt;     UnitsOnOrder smallint NULL,&lt;br /&gt;
15&amp;gt;     ReorderLevel smallint NULL,&lt;br /&gt;
16&amp;gt;     Discontinued bit NOT NULL&lt;br /&gt;
17&amp;gt; )&lt;br /&gt;
18&amp;gt; GO&lt;br /&gt;
1&amp;gt; INSERT Products VALUES(1,&amp;quot;F&amp;quot;,15,4,&amp;quot;10 - 999 g pkgs.&amp;quot;,61.5,66,6,6,6)&lt;br /&gt;
2&amp;gt; INSERT Products VALUES(2,&amp;quot;M&amp;quot;,14,4,&amp;quot;24 - 888 g pkgs.&amp;quot;,34.8,74,7,7,7)&lt;br /&gt;
3&amp;gt; INSERT Products VALUES(3,&amp;quot;R&amp;quot;,17,8,&amp;quot;24 - 777 g jars&amp;quot;,17,171,0,5,0)&lt;br /&gt;
4&amp;gt; INSERT Products VALUES(4,&amp;quot;L&amp;quot;,4,7,&amp;quot;5 kg pkg.&amp;quot;,10,4,20,5,0)&lt;br /&gt;
5&amp;gt; INSERT Products VALUES(5,&amp;quot;R&amp;quot;,12,1,&amp;quot;24 - 0.5 l bottles&amp;quot;,1.23,445,0,25,0)&lt;br /&gt;
6&amp;gt; INSERT Products VALUES(6,&amp;quot;L&amp;quot;,23,1,&amp;quot;500 ml&amp;quot;,18,57,1,20,0)&lt;br /&gt;
7&amp;gt; INSERT Products VALUES(7,&amp;quot;O&amp;quot;,12,2,&amp;quot;12 boxes&amp;quot;,13,23,0,15,0)&lt;br /&gt;
8&amp;gt; go&lt;br /&gt;
(1 rows affected)&lt;br /&gt;
(1 rows affected)&lt;br /&gt;
(1 rows affected)&lt;br /&gt;
(1 rows affected)&lt;br /&gt;
(1 rows affected)&lt;br /&gt;
(1 rows affected)&lt;br /&gt;
(1 rows affected)&lt;br /&gt;
1&amp;gt;&lt;br /&gt;
2&amp;gt;    create TRIGGER ProductIsRationed&lt;br /&gt;
3&amp;gt;       ON Products&lt;br /&gt;
4&amp;gt;       FOR UPDATE&lt;br /&gt;
5&amp;gt;    AS&lt;br /&gt;
6&amp;gt;       IF UPDATE(UnitsInStock)&lt;br /&gt;
7&amp;gt;       BEGIN&lt;br /&gt;
8&amp;gt;       IF EXISTS&lt;br /&gt;
9&amp;gt;          (&lt;br /&gt;
10&amp;gt;           SELECT &amp;quot;True&amp;quot;&lt;br /&gt;
11&amp;gt;           FROM Inserted i&lt;br /&gt;
12&amp;gt;           JOIN Deleted d&lt;br /&gt;
13&amp;gt;              ON i.ProductID = d.ProductID&lt;br /&gt;
14&amp;gt;           WHERE (d.UnitsInStock - i.UnitsInStock) &amp;gt; d.UnitsInStock / 2&lt;br /&gt;
15&amp;gt;              AND d.UnitsInStock - i.UnitsInStock &amp;gt; 0&lt;br /&gt;
16&amp;gt;          )&lt;br /&gt;
17&amp;gt;       BEGIN&lt;br /&gt;
18&amp;gt;          RAISERROR(&amp;quot;Cannot reduce stock by more than 50%% at once.&amp;quot;,16,1)&lt;br /&gt;
19&amp;gt;          ROLLBACK TRAN&lt;br /&gt;
20&amp;gt;       END&lt;br /&gt;
21&amp;gt;       END&lt;br /&gt;
22&amp;gt; GO&lt;br /&gt;
1&amp;gt;&lt;br /&gt;
2&amp;gt; drop TRIGGER ProductIsRationed;&lt;br /&gt;
3&amp;gt; GO&lt;br /&gt;
1&amp;gt;&lt;br /&gt;
2&amp;gt; drop table Products;&lt;br /&gt;
3&amp;gt; GO&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
== Table for INSTEAD OF Trigger for Logical Deletes==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
4&amp;gt;&lt;br /&gt;
5&amp;gt; CREATE TABLE MyTable&lt;br /&gt;
6&amp;gt; (&lt;br /&gt;
7&amp;gt;   ID  int      NOT NULL PRIMARY KEY,&lt;br /&gt;
8&amp;gt;   del char (1) NOT NULL DEFAULT &amp;quot;N&amp;quot;&lt;br /&gt;
9&amp;gt; )&lt;br /&gt;
10&amp;gt; GO&lt;br /&gt;
1&amp;gt;&lt;br /&gt;
2&amp;gt; --INSTEAD OF Trigger for Logical Deletes&lt;br /&gt;
3&amp;gt; CREATE TRIGGER trd_MyTable ON MyTable INSTEAD OF DELETE&lt;br /&gt;
4&amp;gt; AS&lt;br /&gt;
5&amp;gt; IF @@ROWCOUNT = 0&lt;br /&gt;
6&amp;gt;   RETURN&lt;br /&gt;
7&amp;gt; UPDATE M&lt;br /&gt;
8&amp;gt; SET&lt;br /&gt;
9&amp;gt;   del = &amp;quot;Y&amp;quot;&lt;br /&gt;
10&amp;gt; FROM&lt;br /&gt;
11&amp;gt;     MyTable AS M&lt;br /&gt;
12&amp;gt;   JOIN&lt;br /&gt;
13&amp;gt;     deleted AS D ON D.ID = M.ID&lt;br /&gt;
14&amp;gt; GO&lt;br /&gt;
1&amp;gt;&lt;br /&gt;
2&amp;gt; drop table mytable&lt;br /&gt;
3&amp;gt; GO&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
== The syntax of the CREATE TRIGGER statement==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
CREATE TRIGGER trigger_name&lt;br /&gt;
ON {table_name|view_name}&lt;br /&gt;
[WITH ENCRYPTION]&lt;br /&gt;
{FOR|AFTER|INSTEAD OF} [INSERT] [,] [UPDATE] [,] [DELETE]&lt;br /&gt;
AS sql_statements&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
== Trigger Scripts for Cascading DELETEs==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
3&amp;gt;&lt;br /&gt;
4&amp;gt; CREATE TABLE Parent(&lt;br /&gt;
5&amp;gt;   ID int NOT NULL PRIMARY KEY&lt;br /&gt;
6&amp;gt; )&lt;br /&gt;
7&amp;gt; GO&lt;br /&gt;
1&amp;gt; CREATE TABLE Child(&lt;br /&gt;
2&amp;gt;   ID int NOT NULL PRIMARY KEY&lt;br /&gt;
3&amp;gt;                   REFERENCES Parent (ID)&lt;br /&gt;
4&amp;gt;                   ON DELETE CASCADE&lt;br /&gt;
5&amp;gt; )&lt;br /&gt;
6&amp;gt; GO&lt;br /&gt;
1&amp;gt; CREATE TABLE GrandChild(&lt;br /&gt;
2&amp;gt;   ID int NOT NULL PRIMARY KEY&lt;br /&gt;
3&amp;gt;                   REFERENCES Child (ID)&lt;br /&gt;
4&amp;gt;                   ON DELETE CASCADE&lt;br /&gt;
5&amp;gt; )&lt;br /&gt;
6&amp;gt; GO&lt;br /&gt;
1&amp;gt; INSERT Parent VALUES (1)&lt;br /&gt;
2&amp;gt; INSERT Parent VALUES (2)&lt;br /&gt;
3&amp;gt; INSERT Parent VALUES (3)&lt;br /&gt;
4&amp;gt; INSERT Parent VALUES (4)&lt;br /&gt;
5&amp;gt; GO&lt;br /&gt;
(1 rows affected)&lt;br /&gt;
(1 rows affected)&lt;br /&gt;
(1 rows affected)&lt;br /&gt;
(1 rows affected)&lt;br /&gt;
1&amp;gt; INSERT Child VALUES (1)&lt;br /&gt;
2&amp;gt; INSERT Child VALUES (2)&lt;br /&gt;
3&amp;gt; INSERT Child VALUES (3)&lt;br /&gt;
4&amp;gt; INSERT Child VALUES (4)&lt;br /&gt;
5&amp;gt; GO&lt;br /&gt;
(1 rows affected)&lt;br /&gt;
(1 rows affected)&lt;br /&gt;
(1 rows affected)&lt;br /&gt;
(1 rows affected)&lt;br /&gt;
1&amp;gt; INSERT GrandChild VALUES (1)&lt;br /&gt;
2&amp;gt; INSERT GrandChild VALUES (2)&lt;br /&gt;
3&amp;gt; INSERT GrandChild VALUES (3)&lt;br /&gt;
4&amp;gt; INSERT GrandChild VALUES (4)&lt;br /&gt;
5&amp;gt; GO&lt;br /&gt;
(1 rows affected)&lt;br /&gt;
(1 rows affected)&lt;br /&gt;
(1 rows affected)&lt;br /&gt;
(1 rows affected)&lt;br /&gt;
1&amp;gt; CREATE TRIGGER trd_Parent ON Parent AFTER DELETE&lt;br /&gt;
2&amp;gt; AS&lt;br /&gt;
3&amp;gt; IF @@ROWCOUNT = 0&lt;br /&gt;
4&amp;gt;   RETURN&lt;br /&gt;
5&amp;gt; PRINT &amp;quot;Inside Parent trigger.&amp;quot;&lt;br /&gt;
6&amp;gt; GO&lt;br /&gt;
1&amp;gt; CREATE TRIGGER trd_Child ON Child AFTER DELETE&lt;br /&gt;
2&amp;gt; AS&lt;br /&gt;
3&amp;gt; IF @@ROWCOUNT = 0&lt;br /&gt;
4&amp;gt;   RETURN&lt;br /&gt;
5&amp;gt; PRINT &amp;quot;Inside Child trigger.&amp;quot;&lt;br /&gt;
6&amp;gt; GO&lt;br /&gt;
1&amp;gt; CREATE TRIGGER trd_GrandChild ON GrandChild AFTER DELETE&lt;br /&gt;
2&amp;gt; AS&lt;br /&gt;
3&amp;gt; IF @@ROWCOUNT = 0&lt;br /&gt;
4&amp;gt;   RETURN&lt;br /&gt;
5&amp;gt; PRINT &amp;quot;Inside GrandChild trigger.&amp;quot;&lt;br /&gt;
6&amp;gt; GO&lt;br /&gt;
1&amp;gt; --Firing the Cascaded DELETE&lt;br /&gt;
2&amp;gt; DELETE Parent&lt;br /&gt;
3&amp;gt; WHERE&lt;br /&gt;
4&amp;gt;   ID BETWEEN 2 AND 3&lt;br /&gt;
5&amp;gt;&lt;br /&gt;
6&amp;gt; drop trigger trd_parent&lt;br /&gt;
7&amp;gt; drop trigger trd_child&lt;br /&gt;
8&amp;gt; drop trigger trd_grandchild&lt;br /&gt;
9&amp;gt; drop table grandchild&lt;br /&gt;
10&amp;gt; drop table child&lt;br /&gt;
11&amp;gt; drop table parent&lt;br /&gt;
12&amp;gt; GO&lt;br /&gt;
Inside GrandChild trigger.&lt;br /&gt;
Inside Child trigger.&lt;br /&gt;
(2 rows affected)&lt;br /&gt;
Inside Parent trigger.&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
== Update table in a trigger==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
3&amp;gt; CREATE TABLE Customers (&lt;br /&gt;
4&amp;gt;      CustomerID nchar (5) NOT NULL ,&lt;br /&gt;
5&amp;gt;      CompanyName nvarchar (40) NOT NULL ,&lt;br /&gt;
6&amp;gt;      ContactName nvarchar (30) NULL ,&lt;br /&gt;
7&amp;gt;      ContactTitle nvarchar (30) NULL ,&lt;br /&gt;
8&amp;gt;      Address nvarchar (60) NULL ,&lt;br /&gt;
9&amp;gt;      City nvarchar (15) NULL ,&lt;br /&gt;
10&amp;gt;     Region nvarchar (15) NULL ,&lt;br /&gt;
11&amp;gt;     PostalCode nvarchar (10) NULL ,&lt;br /&gt;
12&amp;gt;     Country nvarchar (15) NULL ,&lt;br /&gt;
13&amp;gt;     Phone nvarchar (24) NULL ,&lt;br /&gt;
14&amp;gt;     Fax nvarchar (24) NULL&lt;br /&gt;
15&amp;gt; )&lt;br /&gt;
16&amp;gt; GO&lt;br /&gt;
1&amp;gt;&lt;br /&gt;
2&amp;gt; INSERT Customers VALUES(&amp;quot;1&amp;quot;,&amp;quot;A&amp;quot;,&amp;quot;Maria&amp;quot;,    &amp;quot;Sales&amp;quot;,  &amp;quot;Str. 57&amp;quot;, &amp;quot;Berlin&amp;quot;    ,NULL,&amp;quot;12209&amp;quot;, &amp;quot;Germany&amp;quot;,&amp;quot;111-1111111&amp;quot;,&amp;quot;111-1111111&amp;quot;)&lt;br /&gt;
3&amp;gt; INSERT Customers VALUES(&amp;quot;2&amp;quot;,&amp;quot;M&amp;quot;,&amp;quot;Joe&amp;quot;,      &amp;quot;Owner&amp;quot;,  &amp;quot;Ave. 231&amp;quot;,&amp;quot;Vancouver&amp;quot; ,NULL,&amp;quot;05023&amp;quot;, &amp;quot;Mexico&amp;quot;, &amp;quot;(222) 222-3332&amp;quot;,NULL)&lt;br /&gt;
4&amp;gt; INSERT Customers VALUES(&amp;quot;3&amp;quot;,&amp;quot;H&amp;quot;,&amp;quot;Thomas&amp;quot;,   &amp;quot;Sales&amp;quot;,  &amp;quot;Sq.  111&amp;quot;,&amp;quot;London&amp;quot;    ,NULL,&amp;quot;1D00P&amp;quot;, &amp;quot;UK&amp;quot;,     &amp;quot;(444) 444-4444&amp;quot;,&amp;quot;(444) 444-4444&amp;quot;)&lt;br /&gt;
5&amp;gt; INSERT Customers VALUES(&amp;quot;4&amp;quot;,&amp;quot;B&amp;quot;,&amp;quot;Berg&amp;quot;,     &amp;quot;Order&amp;quot;,  &amp;quot;Blv    8&amp;quot;,&amp;quot;Toronto&amp;quot;   ,NULL,&amp;quot;00222&amp;quot;, &amp;quot;Sweden&amp;quot;, &amp;quot;4444-55 55 65&amp;quot;,&amp;quot;5555-55 55 55&amp;quot;)&lt;br /&gt;
6&amp;gt; INSERT Customers VALUES(&amp;quot;5&amp;quot;,&amp;quot;S&amp;quot;,&amp;quot;Moos&amp;quot;,     &amp;quot;Sales&amp;quot;,  &amp;quot;Fort  57&amp;quot;,&amp;quot;New York&amp;quot;  ,NULL,&amp;quot;68306&amp;quot;, &amp;quot;Germany&amp;quot;,&amp;quot;6666-66666&amp;quot;,&amp;quot;6666-77777&amp;quot;)&lt;br /&gt;
7&amp;gt; INSERT Customers VALUES(&amp;quot;6&amp;quot;,&amp;quot;F&amp;quot;,&amp;quot;Cite&amp;quot;,     &amp;quot;Manager&amp;quot;,&amp;quot;24      &amp;quot;,&amp;quot;Dalles&amp;quot;    ,NULL,&amp;quot;67000&amp;quot;, &amp;quot;France&amp;quot;, &amp;quot;88.60.15.31&amp;quot;,&amp;quot;88.60.15.32&amp;quot;)&lt;br /&gt;
8&amp;gt; INSERT Customers VALUES(&amp;quot;7&amp;quot;,&amp;quot;C&amp;quot;,&amp;quot;Sommer&amp;quot;,   &amp;quot;Owner&amp;quot;,  &amp;quot;Araq, 67&amp;quot;,&amp;quot;Paris&amp;quot;     ,NULL,&amp;quot;28023&amp;quot;, &amp;quot;Spain&amp;quot;,  &amp;quot;(91) 555 22 82&amp;quot;,&amp;quot;(91) 555 91 99&amp;quot;)&lt;br /&gt;
9&amp;gt; INSERT Customers VALUES(&amp;quot;8&amp;quot;,&amp;quot;P&amp;quot;,&amp;quot;Leb&amp;quot;,      &amp;quot;Owner&amp;quot;,  &amp;quot;12      &amp;quot;,&amp;quot;Beijing&amp;quot;   ,NULL,&amp;quot;13008&amp;quot;, &amp;quot;France&amp;quot;, &amp;quot;91.24.45.40&amp;quot;,&amp;quot;91.24.45.41&amp;quot;)&lt;br /&gt;
10&amp;gt; INSERT Customers VALUES(&amp;quot;9&amp;quot;,&amp;quot;D&amp;quot;,&amp;quot;Elizabeth&amp;quot;,&amp;quot;Manager&amp;quot;,&amp;quot;23 Blvd.&amp;quot;,&amp;quot;Tsawassen&amp;quot;,&amp;quot;BC&amp;quot;, &amp;quot;T2F8M4&amp;quot;,&amp;quot;Canada&amp;quot;, &amp;quot;(604) 555-4729&amp;quot;,&amp;quot;(604) 555-3745&amp;quot;)&lt;br /&gt;
11&amp;gt; go&lt;br /&gt;
(1 rows affected)&lt;br /&gt;
(1 rows affected)&lt;br /&gt;
(1 rows affected)&lt;br /&gt;
(1 rows affected)&lt;br /&gt;
(1 rows affected)&lt;br /&gt;
(1 rows affected)&lt;br /&gt;
(1 rows affected)&lt;br /&gt;
(1 rows affected)&lt;br /&gt;
(1 rows affected)&lt;br /&gt;
1&amp;gt;&lt;br /&gt;
2&amp;gt;&lt;br /&gt;
3&amp;gt; CREATE TABLE OrderDetails (&lt;br /&gt;
4&amp;gt;      OrderID int NOT NULL ,&lt;br /&gt;
5&amp;gt;      ProductID int NOT NULL ,&lt;br /&gt;
6&amp;gt;      UnitPrice money NOT NULL DEFAULT (0),&lt;br /&gt;
7&amp;gt;      Quantity smallint NOT NULL DEFAULT (1),&lt;br /&gt;
8&amp;gt;      Discount real NOT NULL DEFAULT (0)&lt;br /&gt;
9&amp;gt; )&lt;br /&gt;
10&amp;gt; GO&lt;br /&gt;
1&amp;gt; INSERT OrderDetails VALUES(10248,11,14,12,0)&lt;br /&gt;
2&amp;gt; INSERT OrderDetails VALUES(10248,42,9.8,10,0)&lt;br /&gt;
3&amp;gt; INSERT OrderDetails VALUES(10248,72,34.8,5,0)&lt;br /&gt;
4&amp;gt; INSERT OrderDetails VALUES(10249,14,18.6,9,0)&lt;br /&gt;
5&amp;gt; INSERT OrderDetails VALUES(10249,51,42.4,40,0)&lt;br /&gt;
6&amp;gt; INSERT OrderDetails VALUES(10250,41,7.7,10,0)&lt;br /&gt;
7&amp;gt; INSERT OrderDetails VALUES(10250,51,42.4,35,0.15)&lt;br /&gt;
8&amp;gt; INSERT OrderDetails VALUES(10250,65,16.8,15,0.15)&lt;br /&gt;
9&amp;gt; INSERT OrderDetails VALUES(10251,22,16.8,6,0.05)&lt;br /&gt;
10&amp;gt; INSERT OrderDetails VALUES(10251,57,15.6,15,0.05)&lt;br /&gt;
11&amp;gt; go&lt;br /&gt;
(1 rows affected)&lt;br /&gt;
(1 rows affected)&lt;br /&gt;
(1 rows affected)&lt;br /&gt;
(1 rows affected)&lt;br /&gt;
(1 rows affected)&lt;br /&gt;
(1 rows affected)&lt;br /&gt;
(1 rows affected)&lt;br /&gt;
(1 rows affected)&lt;br /&gt;
(1 rows affected)&lt;br /&gt;
(1 rows affected)&lt;br /&gt;
1&amp;gt;&lt;br /&gt;
2&amp;gt; CREATE TABLE Orders (&lt;br /&gt;
3&amp;gt;      OrderID int NOT NULL ,&lt;br /&gt;
4&amp;gt;      CustomerID nchar (5) NULL ,&lt;br /&gt;
5&amp;gt;      EmployeeID int NULL ,&lt;br /&gt;
6&amp;gt;      OrderDate datetime NULL ,&lt;br /&gt;
7&amp;gt;      RequiredDate datetime NULL ,&lt;br /&gt;
8&amp;gt;      ShippedDate datetime NULL ,&lt;br /&gt;
9&amp;gt;      ShipVia int NULL ,&lt;br /&gt;
10&amp;gt;     Freight money NULL DEFAULT (0),&lt;br /&gt;
11&amp;gt;     ShipName nvarchar (40) NULL ,&lt;br /&gt;
12&amp;gt;     ShipAddress nvarchar (60) NULL ,&lt;br /&gt;
13&amp;gt;     ShipCity nvarchar (15) NULL ,&lt;br /&gt;
14&amp;gt;     ShipRegion nvarchar (15) NULL ,&lt;br /&gt;
15&amp;gt;     ShipPostalCode nvarchar (10) NULL ,&lt;br /&gt;
16&amp;gt;     ShipCountry nvarchar (15) NULL&lt;br /&gt;
17&amp;gt; )&lt;br /&gt;
18&amp;gt; GO&lt;br /&gt;
1&amp;gt;&lt;br /&gt;
2&amp;gt;&lt;br /&gt;
3&amp;gt;&lt;br /&gt;
4&amp;gt;    ALTER TABLE Customers&lt;br /&gt;
5&amp;gt;       ADD CurrentBalance money NOT NULL&lt;br /&gt;
6&amp;gt;       CONSTRAINT CurrentBalanceDefault&lt;br /&gt;
7&amp;gt;       DEFAULT 0 WITH VALUES&lt;br /&gt;
8&amp;gt; GO&lt;br /&gt;
1&amp;gt;    CREATE TRIGGER myTrigger&lt;br /&gt;
2&amp;gt;       ON OrderDetails&lt;br /&gt;
3&amp;gt;       FOR INSERT, UPDATE, DELETE&lt;br /&gt;
4&amp;gt;    AS&lt;br /&gt;
5&amp;gt;       UPDATE c&lt;br /&gt;
6&amp;gt;          SET c.CurrentBalance = c.CurrentBalance + i.UnitPrice * i.Quantity *&lt;br /&gt;
7&amp;gt;                                 (1 - Discount)&lt;br /&gt;
8&amp;gt;       FROM Customers c&lt;br /&gt;
9&amp;gt;       JOIN Orders o&lt;br /&gt;
10&amp;gt;          ON c.CustomerID = o.CustomerID&lt;br /&gt;
11&amp;gt;       JOIN Inserted i&lt;br /&gt;
12&amp;gt;          ON o.OrderID = i.OrderID&lt;br /&gt;
13&amp;gt;       UPDATE c&lt;br /&gt;
14&amp;gt;          SET c.CurrentBalance = c.CurrentBalance - d.UnitPrice * d.Quantity *&lt;br /&gt;
15&amp;gt;                                 (1 - d.Discount)&lt;br /&gt;
16&amp;gt;       FROM Customers c&lt;br /&gt;
17&amp;gt;       JOIN Orders o&lt;br /&gt;
18&amp;gt;          ON c.CustomerID = o.CustomerID&lt;br /&gt;
19&amp;gt;       JOIN Deleted d&lt;br /&gt;
20&amp;gt;          ON o.OrderID = d.OrderID&lt;br /&gt;
21&amp;gt; GO&lt;br /&gt;
1&amp;gt;&lt;br /&gt;
2&amp;gt; drop TRIGGER myTrigger;&lt;br /&gt;
3&amp;gt; GO&lt;br /&gt;
1&amp;gt;&lt;br /&gt;
2&amp;gt; drop table Customers;&lt;br /&gt;
3&amp;gt; drop table Orders;&lt;br /&gt;
4&amp;gt; drop table OrderDetails;&lt;br /&gt;
5&amp;gt; GO&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	</feed>