楼主: aaaddd

求一触发器

[复制链接]
论坛徽章:
1
授权会员
日期:2005-10-30 17:05:33
11#
发表于 2003-12-30 08:37 | 只看该作者
很奇怪,我运行了一下,总是提示trigger附近有错误

使用道具 举报

回复
招聘 : 数据库管理员
论坛徽章:
66
ITPUB元老
日期:2005-07-16 18:49:11授权会员
日期:2005-10-30 17:05:33ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44现任管理团队成员
日期:2011-05-07 01:45:08版主3段
日期:2012-05-15 15:24:11
12#
发表于 2003-12-30 08:42 | 只看该作者
最初由 aaaddd 发布
[B]造您的意思我改写成:
CREATE TRIGGER cp ON [dbo].[test]
FOR INSERT, UPDATE
AS
DECLARE @min int,
   @a int,
   @b int,
   @c int
SELECT @a = a,  @b= b, @c=id
FROM inserted
IF (@a<@b)
set @min=@a
else
set @min=@b
update test
set c=@min where id=@c

错误286不能更新逻辑表INSERTED 和DELETED.

谢谢你的指点,能不能再帮我想想办法! [/B]


有點那個你的耐心啦。
CREATE TRIGGER cp ON [dbo].[test]
FOR INSERT, UPDATE
AS
DECLARE @min int,
   @a int,
   @b int,
   @c int
SELECT @a = a,  @b= b, @c=id
FROM inserted
IF (@a<@b)
set @min=@a
else
set @min=@b
update test
set c=@min where id=@c

這個觸發器不收修改ID字段﹐如果個改了﹐就用下邊的﹕
CREATE TRIGGER cp ON [dbo].[test]
FOR INSERT, UPDATE
AS
DECLARE @min int,
   @a int,
   @b int,
   @c int
SELECT @a = a,  @b= b
FROM inserted
SELECT @c=id from deleted
IF (@a<@b)
set @min=@a
else
set @min=@b
update test
set c=@min where id=@c

使用道具 举报

回复
招聘 : 数据库管理员
论坛徽章:
66
ITPUB元老
日期:2005-07-16 18:49:11授权会员
日期:2005-10-30 17:05:33ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44现任管理团队成员
日期:2011-05-07 01:45:08版主3段
日期:2012-05-15 15:24:11
13#
发表于 2003-12-30 08:44 | 只看该作者
最初由 CL5460 发布
[B]很奇怪,我运行了一下,总是提示trigger附近有错误 [/B]


暈﹐觸發器能隨便執行嗎﹖你要創建它所依附的表。

使用道具 举报

回复
论坛徽章:
1
授权会员
日期:2005-10-30 17:05:33
14#
发表于 2003-12-30 17:13 | 只看该作者
不是这个意思,我说的是,我根本没有办法存盘。

使用道具 举报

回复
招聘 : 数据库管理员
论坛徽章:
66
ITPUB元老
日期:2005-07-16 18:49:11授权会员
日期:2005-10-30 17:05:33ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44现任管理团队成员
日期:2011-05-07 01:45:08版主3段
日期:2012-05-15 15:24:11
15#
发表于 2003-12-30 17:27 | 只看该作者
最初由 CL5460 发布
[B]不是这个意思,我说的是,我根本没有办法存盘。 [/B]


       你需要存盤嗎﹖

使用道具 举报

回复
招聘 : 数据库管理员
论坛徽章:
66
ITPUB元老
日期:2005-07-16 18:49:11授权会员
日期:2005-10-30 17:05:33ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44现任管理团队成员
日期:2011-05-07 01:45:08版主3段
日期:2012-05-15 15:24:11
16#
发表于 2003-12-30 17:29 | 只看该作者
最好安裝個簡體中文的SQL﹐然后在ONLINE中查CREATE TRIGGER﹐
然后將示例考下來測試一下﹐這樣問是不行的﹐觸發器在執行完畢后
就會存儲在數據庫啦。

使用道具 举报

回复
论坛徽章:
0
17#
 楼主| 发表于 2003-12-30 18:37 | 只看该作者
谢谢,谢谢:
xzh2000
仙人抚我须 结发授长生

不过别嫌我烦哦,我还有问题"SELECT @a = a, @b= b
FROM inserted
SELECT @c=id from deleted
"
为什么前用 inserted ,后用deleted ,这有什么讲究吗?我对这两个表不是太熟悉.

使用道具 举报

回复
论坛徽章:
0
18#
 楼主| 发表于 2003-12-30 18:47 | 只看该作者
大概意思我觉得INTSERTED是已插入的记录,DELETED是已删除的记录,我们可以直接查看它们里面的数据吗?

使用道具 举报

回复
招聘 : 数据库管理员
论坛徽章:
66
ITPUB元老
日期:2005-07-16 18:49:11授权会员
日期:2005-10-30 17:05:33ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44现任管理团队成员
日期:2011-05-07 01:45:08版主3段
日期:2012-05-15 15:24:11
19#
发表于 2003-12-30 18:52 | 只看该作者
最初由 aaaddd 发布
[B]大概意思我觉得INTSERTED是已插入的记录,DELETED是已删除的记录,我们可以直接查看它们里面的数据吗? [/B]


   可以在觸發器內查看的。
  select * from inserted
    select * from deleted

產生的時間﹕
insert                inserted
delete               deleted
update             inserted(新數據),deleted(舊數據)


一、触发器的创建、修改、删除
        1、触发器的定义
       是一种特殊的过程,当满足触发事件,服务器自动执行
2、触发器的触发事件
   INSERT       DELETE  UPDATE
   INSTEAD OF  AFTER
3、创建删除修改触发器
   CREATE TRIGGER 触发器名 ON 表名|视图名 FOR INSERT,DELETE,UPDATE
   AS  BEGIN  ......  END
   CREATE TRIGGER 触发器名 ON 表名|视图名 AFTER INSERT,DELETE,UPDATE
   AS  BEGIN  ......  END
   CREATE TRIGGER 触发器名 ON 表名|视图名 INSTEAD OF INSERT,DELETE,UPDATE
   AS  BEGIN  ......  END
   ALTER TRIGGER          触发器名
4、触发器的作用
   触发器实现复杂完整性
5、禁止与激活触发器
   alter  table 表名 enable|disable  trigger 触发器名
6、触发器的临时表  
        INSERT        DELETE        UPDATE
INSERTED        INSERTED                INSERTED(后)
DELETED                DELETED        DELETED(前)
7、UPDATE函数的使用
8、递归与嵌套触发器
   练习使用递归与嵌套触发器
9、用触发器实现复杂的业务逻辑

使用道具 举报

回复
论坛徽章:
0
20#
 楼主| 发表于 2003-12-30 18:58 | 只看该作者
触发器语句中使用了两种特殊的表:deleted 表和 inserted 表。Microsoft&reg; SQL Server™ 2000 自动创建和管理这些表。可以使用这两个临时的驻留内存的表测试某些数据修改的效果及设置触发器操作的条件;然而,不能直接对表中的数据进行更改。

inserted 和 deleted 表主要用于触发器中:

扩展表间引用完整性。


在以视图为基础的基表中插入或更新数据。


检查错误并基于错误采取行动。


找到数据修改前后表状态的差异,并基于此差异采取行动。
Deleted 表用于存储 DELETE 和 UPDATE 语句所影响的行的复本。在执行 DELETE 或 UPDATE 语句时,行从触发器表中删除,并传输到 deleted 表中。Deleted 表和触发器表通常没有相同的行。

Inserted 表用于存储 INSERT 和 UPDATE 语句所影响的行的副本。在一个插入或更新事务处理中,新建行被同时添加到 inserted 表和触发器表中。Inserted 表中的行是触发器表中新行的副本。

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表