SQL Server 触发器文档格式.docx

上传人:b****2 文档编号:13595480 上传时间:2022-10-12 格式:DOCX 页数:14 大小:16.86KB
下载 相关 举报
SQL Server 触发器文档格式.docx_第1页
第1页 / 共14页
SQL Server 触发器文档格式.docx_第2页
第2页 / 共14页
SQL Server 触发器文档格式.docx_第3页
第3页 / 共14页
SQL Server 触发器文档格式.docx_第4页
第4页 / 共14页
SQL Server 触发器文档格式.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

SQL Server 触发器文档格式.docx

《SQL Server 触发器文档格式.docx》由会员分享,可在线阅读,更多相关《SQL Server 触发器文档格式.docx(14页珍藏版)》请在冰豆网上搜索。

SQL Server 触发器文档格式.docx

SQLServer中。

没有BEFOREINSERT或者AFTERINSERT

根据文档显示,以及代码的测试。

基本上类似于

Oracle的AFTERINSERT

SQLSercer触发器没有FOREACHROW关键字

一次更新一条,还是多条,取决于

INSERTED里面的内容。

CREATETRIGGERBeforeInsertTest

ON

test_trigger_table

FORINSERT

AS

DECLARE

@IdINT,

7&

@NameVARCHAR(10);

8&

BEGIN

9&

PRINT('

BEFORE

INSERT'

);

10&

SELECT@Id=id,@Name=nameFROMINSERTED;

11&

PRINT('

NewName='

+@Name);

12&

UPDATEtest_trigger_tableSETval=

100WHEREid=@Id;

13&

END;

14&

go

INSERTINTOtest_trigger_table(id,name)VALUES(1,

'

ABC'

BEFOREINSERT

NewName=ABC

(1行受影响)

select*fromtest_trigger_table;

idnameval

---------------------

-----------

1ABC100

UPDATE

TRIGGERAfterUpdateTest

ONtest_trigger_table

FOR

@OldNameVARCHAR(10),

@NewNameVARCHAR(10);

AFTER

UPDATE'

SELECT@NewName=nameFROMinserted;

SELECT

@OldName=nameFROMdeleted;

OldName='

+

@OldName);

+@NewName);

15&

UPDATEtest_trigger_tableSETname='

XYZ'

WHEREid=

1;

AFTERUPDATE

OldName=ABC

NewName=XYZDELETE

CREATETRIGGERAfterDeleteTest

DELETE

@OldNameVARCHAR(10);

BEGIN

AFTERDELETE'

SELECT@OldName=nameFROM

deleted;

+@OldName);

DELETEFROMtest_trigger_tableWHEREid=1;

OldName=XYZINSERT/UPDATE/DELETE行为判断

测试此处时,先删除前面的3个触发器

CREATETRIGGERAfterAllTest

INSERT,UPDATE,DELETE

ALL'

IFEXISTS(SELECT1FROMinserted)ANDNOTEXISTS(SELECT1FROM

deleted)

INSERTING'

END;

IFEXISTS(SELECT1FROMinserted)ANDEXISTS(SELECT1FROM

UPDATING'

IFNOTEXISTS(SELECT1FROMinserted)ANDEXISTS(SELECT1FROM

16&

17&

DELETING'

18&

19&

20&

INSERTINTOtest_trigger_table(id,

name)VALUES(1,'

WHEREid=1;

AFTERALL

INSERTING

UPDATING

DELETING

SQLServer

INSERT/UPDATE/DELETE多行

CREATETRIGGER

AfterAllTest2

@InsertCount

INT,

@DeleteCountINT;

2'

SELECT@InsertCount=COUNT

(1)FROMinserted;

SELECT@DeleteCount=COUNT

(2)FROMdeleted;

@InsertCount='

+STR(@InsertCount));

@DeleteCount='

+STR(@DeleteCount));

INSERTINTOtest_trigger_table(id,name)VALUES(1,'

AFTERALL2

@InsertCount=1

@DeleteCount=0

INSERTINTO

test_trigger_table(id,name)VALUES(2,'

DEF'

ALL

insertintotest_trigger_table

select*fromtest_trigger_table;

ALL2

@InsertCount=2

(2行受影响)

UPDATEtest_trigger_tableSET

name='

WHEREid=1;

2

@DeleteCount=2

针对特定列的触发

测试此处时,先删除其它的触发器

通过

COLUMNS_UPDATED

来判断哪些列被更新

函数以从左到右的顺序返回位,最左边的为最不重要的位。

最左边的位表示表中的第一列;

向右的下一位表示第二列,依此类推。

如果在表上创建的触发器包含8

列以上,则COLUMNS_UPDATED返回多个字节,最左边的为最不重要的字节。

在INSERT操作中COLUMNS_UPDATED

将对所有列返回TRUE值,因为这些列插入了显式值或隐性(NULL)值。

dropTRIGGERAfterUpdateTest;

AfterUpdateTest

FORINSERT,

@OldValVARCHAR(10),

@NewValVARCHAR(10);

IF(COLUMNS_UPDATED()

&

amp;

4)&

0

AFTERUPDATEOnly

Val'

SELECT@NewVal=valFROMinserted;

@OldVal=valFROMdeleted;

OldVal='

@OldVal);

NewVal='

+@NewVal);

END

name,val)VALUES(1,'

1);

AFTERUPDATEOnlyVal

NewVal=1

WHEREid=1;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 总结汇报 > 学习总结

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1