???????? ??????

Печать
Рейтинг пользователей: / 1
ХудшийЛучший 

??? ????????? ????? ??????????? ??????????? ? ??????? ??? ??????? (?????????? ??????????? ??? ??? ??????)

????????? ??????????? ??????????? ? ???????, ????? ???????, ????? ???????? ?????? ????????? ? ????? ??? ????? ????????.

???????? ?????? ???????????? ???????????

1. ? ????? ???? ?????? ???????? ?????? ???????, ??????? ????? ????????? ??????????? ? ???????? ????? ????????? ??????????? ?? ???????????? ????.

-???-

???????? ???????, ??????? ????? ????????? ??????????? ? ???????????? ??????, ???????? ?????? ??????? ???? ? ???????????? ? ???????? ????? ????????? ??????????? ?? ???????????? ????.

2. ??????? ?????? ????????.

ms190377.note(ru-ru,SQL.100).gif??????????.

????? ??????? ??????????? ??-???????, ??????? ??? ? ???? ??? ???????????.

3. ? ???? ????????? ? ????? ??????? ????????? SQL ??? ???????????? ???????????. ????????, ????? ?????????? ?????? ? ??????? state ? ??????? authors ???-??????, ???????:

state = 'NY'

4. ????? ?????????? ?????? ? ??????? zip ????????, ?????????? ?? 5 ????, ???????:

zip LIKE '[0-9][0-9][0-9][0-9][0-9]'

ms190377.note(ru-ru,SQL.100).gif??????????.

?????????, ??? ??? ?????????? ??????????? ?? ???????? ????????? ? ????????? ??????? (').

5. ?????????? ????????? ???????????? ??????, ????? ?????????, ????? ??????????? ??????????? ???????????.

    • ????? ????????? ?????????? ??????????? ??? ??????, ??????? ???????????? ?? ???????? ???????????, ???????? ?????? ??? ???????? ??? ????????? ????????? ???????????? ??????.
    • ????? ??????????? ??????????? ?????? ???, ????? ????? ?????????? ????????? ??????? ??? ?????????? ?? ???? ???????, ???????? ?????? ???????? ????????????? ??? ??????????. ?????????????? ???????? ??. ? ??????? ?????????? ?????????????, ???????????????? ? ?????????? ? ??????? ????????? .
    • ????? ??????????? ??????????? ?????? ???, ????? ?????????? ?????????? ??? ?????????? ?????? ? ???? ???????, ???????? ?????? ????????? ??? INSERT ? UPDATE.

1. ? ????? ???? ?????? ???????? ?????? ???????, ??????? ????? ????????? ??????????? ? ???????? ????? ????????? ??????????? ?? ???????????? ????.

-???-

???????? ???????, ??????? ????? ????????? ??????????? ? ???????????? ??????, ???????? ?????? ??????? ???? ? ???????????? ? ???????? ????? ????????? ??????????? ?? ???????????? ????.

2. ??????? ?????? ????????.

ms190377.note(ru-ru,SQL.100).gif??????????.

????? ??????? ??????????? ??-???????, ??????? ??? ? ???? ??? ???????????.

3. ? ???? ????????? ? ????? ??????? ????????? SQL ??? ???????????? ???????????. ????????, ????? ?????????? ?????? ? ??????? state ? ??????? authors ???-??????, ???????:

state = 'NY'

4. ????? ?????????? ?????? ? ??????? zip ????????, ?????????? ?? 5 ????, ???????:

zip LIKE '[0-9][0-9][0-9][0-9][0-9]'

ms190377.note(ru-ru,SQL.100).gif??????????.

?????????, ??? ??? ?????????? ??????????? ?? ???????? ????????? ? ????????? ??????? (').

5. ?????????? ????????? ???????????? ??????, ????? ?????????, ????? ??????????? ??????????? ???????????.

    • ????? ????????? ?????????? ??????????? ??? ??????, ??????? ???????????? ?? ???????? ???????????, ???????? ?????? ??? ???????? ??? ????????? ????????? ???????????? ??????.
    • ????? ??????????? ??????????? ?????? ???, ????? ????? ?????????? ????????? ??????? ??? ?????????? ?? ???? ???????, ???????? ?????? ???????? ????????????? ??? ??????????. ?????????????? ???????? ??. ? ??????? ?????????? ?????????????, ???????????????? ? ?????????? ? ??????? ????????? .
    • ????? ??????????? ??????????? ?????? ???, ????? ?????????? ?????????? ??? ?????????? ?????? ? ???? ???????, ???????? ?????? ????????? ??? INSERT ? UPDATE.

??????????? ???????????? ?? SQL Server 2008 (?????? 2008 ?.)


???????? ? ????????? ??????????? CHECK

??????????? CHECK ????? ????????? ??? ????? ??????????? ??????? ??? ?? ????????. ???? ??????? ??? ??????????, ????? ???????? ??????????? CHECK. ??????? ? ??????? ????? ????????? ????????? ??????????? CHECK.

???? ??????????? CHECK ??? ??????????, ??? ????? ???????? ??? ???????. ????????, ????? ?????????? ????????????? ???????? ?????????, ???????????? ? ??????????? CHECK ??? ??????? ???????.

ms179491.note(ru-ru,SQL.100).gif??????????.

????? ???????? ??????????? CHECK, ?????, ?????? ????? ??????? ???????????? ??????????? CHECK ? ???????? ??????? ??? ? ????? ????????????.

? ????????? ??????? Transact-SQL ???????? ???????? ??????? ? ??????????? ????????? ???? ??????? ????? ?????????? ??????????? CHECK ??? ??????? CreditRating.

IF OBJECT_ID ('dbo.Vendors', 'U') IS NOT NULL
DROP TABLE dbo.Vendors;
GO
CREATE TABLE dbo.Vendors 
(VendorID int PRIMARY KEY, VendorName nvarchar (50), 
CreditRating tinyint)
GO
ALTER TABLE dbo.Vendors ADD CONSTRAINT CK_Vendor_CreditRating
 CHECK (CreditRating >= 1 AND CreditRating <= 5)

??????? ??????????? CHECK ??? ?????????? ??????????? ?? ?????????? ???????? ?????? ? ??????? ??? ????????, ?????????? ? ????????? ???????????.

??? ???????? ??????????? CHECK ? ???????? ???????? ???????

??? ???????? ??????????? CHECK ? ???????????? ???????

??? ???????? ??????????? CHECK


???????????? ??????????? CHECK ? ??????? ????????? WITH NOCHECK

??? ?????????? ??????????? CHECK ? ???????????? ??????? ??????????? CHECK ????? ????????? ?????? ? ????? ?????? ??? ? ???????????? ??????. ?? ?????????, ??????????? CHECK ??????????? ??? ? ???????????? ??????, ??? ? ? ????? ??????. ???????? WITH NOCHECK ?????????? ALTER TABLE ???????????? ??? ?????????? ?????? ??????????? ?????? ? ????? ??????????? ??????. ???? ???????? ??????? ???????????? ? ???????, ????? ???????????? ?????? ??? ????????????? ?????? ??????????? CHECK ??? ????? ??????-??????? ??????? ?????????????? ?????????? ???????????, ??????? ? ??????? ???????.

????????, ?????? ??????????? ????? ??????????????? ????????????? ?? ????? ??? ??????????? ???????? ?????, ? ????? ??????????? ????? ????????? ?????????? ????????????? ???????? ?????. ?????? ?????? ? ???????????? ????????? ?????? ??? ??? ????????????? ? ????? ?????????????? ? ?????? ???????, ??????? ???????? ????????????? ???????? ????. ?????????????, ???????? ?? ???????????? ?????? ??????????? ?????? ???????????? ?????? ????? ??????.

?????? ??????? ????????? ???????????? ??? ?????????? ??????????? ??? ???????? ???????????? ??????, ????????? ? ???? ?????? ?? ???????????? ???????? ?????????? ??????????? Database Engine, ?????????????? ?????????? ?????? ??????????? ??? ??????.


??? ?????????? ???????? ???????????? ?????? ??? ???????? ??????????? CHECK

?????????? ??????????? CHECK

?????????? ??????????? ?????????? ??????????? CHECK ??? ?????????? ????????? ????????, ????? ??? ???????? INSERT, ???????? UPDATE ? ???????? ?? ????????? ??????????.

??? ?????????? ??????????? CHECK ??? ?????????? ?????????? INSERT ? UPDATE

??? ?????????? ??????????? CHECK ??? ?????????? ??????????

??? ????????? ???????? ?? ???????????? CHECK


??????????? ???????? ? ????????? ????? SQL

???????? ???????? ????? ?? ?????????????? ???????? ????????. ?? ?????????? ?????????? ??? ?????????? ??? ??????? ??????-???? ????????? ????? ??????????????? ??????? (DML). ???????? ???????????? ??? ???????? ??????????? ??????, ? ????? ??? ?????? ??????????.

??????? - ??? ????????????????? SQL-?????????, ?????????? ??????? ??????????? ???????????? ???????????? ??????? ?????? ??????????? ???? ??????. ?????????? ????????? ??????? ?????? ?????? ?????? ??? ????????????? ???? ??????. ? ??? ?? ?? ????????????? ????? ??????? ? ??????????????? ????????? ???????? ?? ???????? ?????/??????. ? ??? ??????, ????? ??? ?? ??????????? (? ??????? ???????? ??????????????????? ????????? ????????) ????? ???????? ? ??????? ???????? ???????? ??? ?????????? ????????, ?????????? ????????? ???????????????.

???????? - ?????? ?????????? SQL-???????, ???????????? ??? ??????????? ??????????? ?????? ? ???? ??????. ? ??????? ??????????? ???????????, ?????? ? ???????? ?? ????????? ?? ?????? ????? ???????? ??????? ?????? ????????????????. ????? ????????? ??????????? ??????? ????????? ???????? ??????, ????????????? ?? ????????????? ? ??????????. ????? ????, ?????? ?????????? ??????????? ????????? ???????? ???????, ????? ?????? ??????? ???????? ????????? ??????. ???????? ????? ????????????? ??? ?????? ???? ???????, ?????????? ? ???????? ????? ?????????? ???? ???????? ? ???????????? ? ?????????, ???????????? ?????????? ? ?.?.

??????? ???????????? ????? ??????????? ??? ???????? ????????, ??????????? ???????? ????????????? ??? ??????? ????????? ?????? ? ????????, ? ???????? ???????? ???????. ?????? ??????? ????????????? ? ?????????? ???????. ??? ???????????? ?? ??????????? ?????? ??????????????? ??? ???? ??????????. ? ?????? ??????????? ?????? ??? ????????? ??????????? ?????? ?????????? ????? ???? ??????????. ??? ????? ???????? ????????? ???????????. ?????????? ????? ??? ?????????, ??? ????????? ?????????.

??????? ??????? ?????? ???????? ???? ??????. ??? ??????????? ????????? ???????? ?????????? ????????? ????????? ??????, ???????? ????? ? ???? ?????? ???????? ? ?.?.

??????? ???????????? ????? ?????? ???????? ? ? ?? ?? ????? ??????? ????????. ???, ??? ???????????? ?????? ??? ?????? ????? ????? ?????????? ????? ???? ??????, ??????? ???????? ?????????? ????? ????????? ??????????.

? ??????? ?? ??????? ????????????, ??????? ??????????? ?????? ? ?????? ?????? ????????????? ??????????? ???????, ? ???? ?? ?? ?? ????? ??????????. ?????????? ??? ? ???????? ?????? ???????? ???????? ????????. ? ??????? ????????? ??????????? ????????? ????:

???????? ?????? ??????? CREATE TRIGGER ??????? ????:

<???????????_????????>::=
 CREATE TRIGGER ???_????????
 BEFORE | AFTER <??????????_???????>
 ON <???_???????>
 [REFERENCING 
<??????_??????_???_?????_???????????>]
 [FOR EACH { ROW | STATEMENT}]
 [WHEN(???????_????????)]
 <????_????????>

?????????? ??????? ??????? ?? ???????, ???????? ? ?????????? ????? ? ???????. ? ????????? ?????? ??? ??????????? ??????? ????? ??????? ?????????? ????? ???????? ???????. ????? ??????? ???????? ???????????? ? ??????? ???????? ???? BEFORE (??????? ??????????? ?? ?????????? ????????? ? ??? ???????) ??? AFTER (????? ?? ??????????).

??????????? ????????? ???????? ???????? ??? ?????? ?????? (FOR EACH ROW), ?????????? ?????? ????????, ??? ?????? ???? ??? ??? ??????? ??????? (FOR EACH STATEMENT).

??????????? <??????_??????_???_?????_???????????> ????????? ? ????? ???????????, ??? ?????? ??? ????? ?????? (OLD / NEW) ???? ?????? ??? ????? ??????? (OLD TABLE / NEW TABLE). ????, ??? ?????? ???????? ?? ????????? ??? ??????? ???????, ? ????? - ??? ??????? ????????.

??? ??????? ??????????? ????????????? ???????? ????? ????? ????? ?????? ??????????. ???????? ?? ???????????? ??????????? ? ???, ??? ??????????? ??????? ??????????? ?????? ???? ?????? ? ???????????? ?????????????? ??? ?????? ?? ??????????. ??? ????? ??????????? ????????? ??????????. ??? ?? ????? ??????? ????????? ? ? ???????? ???????? ???????????:

??????????? ?????????? ???????? ????? ???????? ? ????????? ?????????, ?????, ????????, ??? ????????? "???????" ??????????. ???????? ???????? ?????????? ????? ??????????? ????????? ????????, ??????? ??????? ???????? ?????? ???????? ?? ???????? ? ???????? ?????????? ???????.

? ?????????? ???? MS SQL Server ???????????? ????????? ???????? ???????? ??? ????????? ????????:

<???????????_????????>::=
{CREATE | ALTER} TRIGGER ???_????????
ON {???_??????? | ???_????????? }
[WITH ENCRYPTION ]
{
{ { FOR | AFTER | INSTEAD OF }
{ [ DELETE] [,] [ INSERT] [,] [ UPDATE] }
[ WITH APPEND ]
[ NOT FOR REPLICATION ]
AS
 sql_????????[...n]
} |
{ {FOR | AFTER | INSTEAD OF } { [INSERT] [,]
 [UPDATE] }
[ WITH APPEND]
[ NOT FOR REPLICATION]
AS
{ IF UPDATE(???_???????)
[ {AND | OR} UPDATE(???_???????)] [...n]
|
IF (COLUMNS_UPDATES(){????????_???_?????????}
 ???_?????_?????????)
{????????_???_????????? }???_????? [...n]}
sql_???????? [...n]
}
}

??????? ????? ???? ?????? ?????? ? ??????? ???? ??????, ?? ??????????? ????????? ?????? ???????? ? ?????? ????? ??????, ? ??? ????? ? ????????????? ?? ????????? ???????.

?????????? ?????????? ?????????? ?? ??????? CREATE | ALTER TRIGGER.

??? ???????? ?????? ???? ?????????? ? ???????? ???? ??????. ????????????? ????? ??????? ??? ?????????.

??? ???????? ????????? WITH ENCRYPTION ?????? ????????? ?????????? ???? ????????, ????? ?????, ??????? ??????????????, ?? ??? ???????? ? ???? ?????? ? ????????? ???. ?????????? ????? ???????????? ??? ??????? ????????? ?????????? ????????? ??????, ?????????? ???????????????? ?????????????? ???????????? ??? ???????????? ??????.


???? ?????????

? SQL Server ?????????? ??? ?????????, ???????????? ????????? ?????????:

???????? ????????? ?? ???? ??????, ?? ??????? ??? ?????????.

?????????? ??? ???? ?????????:

??????????? [ DELETE] [,] [ INSERT] [,] [ UPDATE] ? FOR | AFTER | INSTEAD OF } { [INSERT] [,] [UPDATE] ??????????, ?? ????? ??????? ????? ??????????? ???????. ??? ??? ???????? ?????? ???? ??????? ???? ?? ???? ???????. ??????????? ???????? ????????, ???????????? ?? ??? ??? ?? ??? ??? ???????.

???????? WITH APPEND ????????? ????????? ????????? ????????? ??????? ????.

??? ???????? ???????? ? ?????????? NOT FOR REPLICATION ??????????? ??? ?????? ?? ????? ?????????? ??????????? ?????? ??????????? ??????????.

??????????? AS sql_????????[...n] ?????????? ????? SQL- ?????????? ? ??????, ??????? ????? ????????? ??? ??????? ????????.

???????, ??? ?????? ???????? ?? ??????????? ?????????? ???? ????????, ?????, ????????, ???:

?????????? ???? ?????? ?? ?????????, ??? ??? ??? ?? ????? ???? ???????? ? ?????? ?????? ??????????, ? ??????? ??????????? ???????. ??? ?????????? ???? ?? ????? ?????-?? ??????? ????????? ?? ???????????????? ??????????? ?????????. ?????? ????? ????? ????????, ?????, ????????, ????? ????????? ?????? ??????? ??????????? ????????? ?????????????? ????????? ????? ??????? ??????????.


???????????????? ????????

??? ?????????? ?????? ??????????, ????????? ? ???????? ??????? ?????? ??????? ??? ??????????? ???????: inserted ? deleted. ? ??? ?????????? ?????? ?????, ??????? ????? ????????? ??? ??????? ?? ?????????? ??????????. ????????? ?????? inserted ? deleted ????????? ????????? ??????, ??? ??????? ???????????? ???????. ??? ??????? ???????? ????????? ???? ???????? ?????? inserted ? deleted, ??????? ??????? ?????? ??????? ?? ?????? ???????? ? ??? ??????. ? ??????????? ?? ???? ????????, ????????? ?????????? ????????, ?????????? ?????? inserted ? deleted ????? ???? ??????:

??? ????????? ?????????? ? ?????????? ?????, ??????? ????? ???????? ??? ???????? ?????????? ????????, ????? ???????????? ??????? @@ROWCOUNT; ??? ?????????? ?????????? ?????, ???????????? ????????? ????????. ??????? ???????????, ??? ??????? ??????????? ?? ??? ??????? ???????? ?????????? ??????, ? ? ?????? ?????????? ??????? ?????????. ???? ????? ??????? ???????????? ?? ????????? ?????, ??????? ??????? ?????? ???????????? ??? ??? ??????.

???? ??????? ?????????, ??? ?? 100 ???????????, ?????????? ??? ????????? ????? ?????? ???? ?? ????????????? ??? ??? ???? ????????, ?? ??????? ?????? ?? ????? ?????????, ???????? ??? ???????. ????? ????????? ??????????? ???????????? ?????????? - ?????? ???? ????????? ???? ??? ???????????, ???? ?? ?????.

??????? ??????????? ??? ?????? ???????????? ??????????, ??????? ?????? ???????? ??????????? ?????????? ?????? ?????????? ????????????. ? ?????????, ??? ??????????? ????????? ??????????? ??????????? ??? ?????????? ?????????? ???????? ? ?????? ???? ?????????, ??????? ??????? ????????? ????????????, ?????????? ???????????? ??????? ROLLBACK TRANSACTION.

??? ????????? ?????? ????????, ?????????? ??? ?????????? ?????? INSERT ??? UPDATE, ????????? ?????????? ????????, ????? ???????????? ??????? COLUMNS_UPDATED(). ??? ?????????? ???????? ?????, ?????? ??? ????????, ??????? ? ????????, ????????????? ?????? ??????? ??????? (? ??????? ?????????? ???????? ??? ???????? ???????). ???? ??? ?????????? ? ???????? "1", ?? ??????????????? ??????? ??? ???????. ????? ????, ???? ????????? ??????? ?????????? ? ??????? UPDATE (???_???????).

??? ???????? ???????? ???????????? ???????

DROP TRIGGER {???_????????} [,...n]

?????? 14.1. ????????????? ???????? ??? ?????????? ??????????? ?? ????????. ? ??????????? ? ??????? ?????? ?????? ?????????? ?????????? ?????? ?????? ???? ?? ??????, ??? ??? ??????? ?? ??????? ?????.

??????? ??????? ?????? ? ??????? ?????? ????? ????, ????????, ?????:

INSERT INTO ?????? 
VALUES (3,1,-299,'01/08/2002')

??????????? ??????? ?????? ????????????? ?? ?? ?????????? ????????? ???????: ?????????? ???????? ???????, ???? ? ??????? ????? ???????? ??????? ?????? ????????? ?????? ???????????? ?????????? ?????? ? ????????? ????? (? ??????? ??? ??????=3). ?? ??????????? ?????? ?????????? ?????? ??????????? ?? ?????? "+", ???? ????? ????????????, ? ?? ?????? "-", ???? ?? ?????????. ?????????????? ??????? ???????? ?? ????????? ?????? ????? ??????????? ??????.

CREATE TRIGGER ???????_ins
ON ?????? FOR INSERT
AS
IF @@ROWCOUNT=1
BEGIN
 IF NOT EXISTS(SELECT *
 FROM inserted
 WHERE -inserted.??????????<=ALL(SELECT
 ?????.???????
 FROM ?????,??????
 WHERE ?????.?????????=
 ??????.?????????))
 BEGIN
 ROLLBACK TRAN
 PRINT 
'?????? ????????: ?????? ?? ?????? ???'
 END
END

?????? 14.1. ????????????? ???????? ??? ?????????? ??????????? ?? ????????. (html, txt)

?????? 14.3. ??????? ??????? ??? ????????? ???????? ???????? ?????? ?? ??????? ??????, ????????, ????? ???????:

DELETE FROM ?????? WHERE ?????????=4

??? ??????, ??? ???????? ?????? ??? ???????? ??????, ?????????? ???????????????? ??? ??????? ?? ??????. ??????? ???????????? ?????? ???? ????????? ??????.

CREATE TRIGGER ???????_del
ON ?????? FOR DELETE
AS
IF @@ROWCOUNT=1 -- ??????? ???? ??????
BEGIN
 DECLARE @y INT,@x INT
--???????????? ??? ? ?????????? ?????? ?? 
--????????? ?? ??????? ????? ??????
 SELECT @y=?????????, @x=??????????
 FROM deleted
--? ??????? ????? ?????????????? ?????????? 
--??????
 UPDATE ?????
 SET ???????=???????-@x
 WHERE ?????????=@y
END

?????? 14.3. ??????? ??? ????????? ???????? ???????? ?????? ?? ??????? (html, txt)