社区
MS-SQL Server
帖子详情
如何得到SQLSERVER触发器(删除型)中DELETED表中的值?
zhaofansym
2001-12-11 01:22:49
CREATE TRIGGER [DELETECourse] ON [dbo].[COURSE]
FOR DELETE
AS
DECLARE @CourseID varChar(15)
SET @CourseID=LTRIM( STR( deleted.Course_id ) )
报错误107:列前缀‘deleted’与查询中用的表名和别名不匹配
...全文
314
7
打赏
收藏
如何得到SQLSERVER触发器(删除型)中DELETED表中的值?
CREATE TRIGGER [DELETECourse] ON [dbo].[COURSE] FOR DELETE AS DECLARE @CourseID varChar(15) SET @CourseID=LTRIM( STR( deleted.Course_id ) ) 报错误107:列前缀‘deleted’与查询中用的表名和别名不匹配
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
7 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
昵称被占用了
2001-12-11
打赏
举报
回复
呵呵,应该改为 TOP 1 能保证你一次删多条时不出错!
zhaofansym
2001-12-11
打赏
举报
回复
N_chow(一劍飄香):
TOP1是什么?我用了一下,语法检查有错
zhaofansym
2001-12-11
打赏
举报
回复
Haiwer(海阔天空)的方法可以,我目前只需要每次只删除一条记录
我是新手,正在想办法给分
N_chow
2001-12-11
打赏
举报
回复
CREATE TRIGGER [DELETECourse] ON [dbo].[COURSE]
FOR DELETE
AS
DECLARE @CourseID varChar(15)
SELECT Top1 @CourseID=LTRIM( STR( deleted.Course_id ) )from deleted
--最好是用一個Cursor來取值,因為當刪多筆時,deleted中會有多筆資料。
昵称被占用了
2001-12-11
打赏
举报
回复
可以改为
DECLARE @CourseID varChar(15)
select @CourseID=LTRIM( STR( Course_id ) ) from deleted
但是,这样写触发器只能处理每次只删除一条记录的情况.
zhaofansym
2001-12-11
打赏
举报
回复
请nononono(null,null)兄帮忙
zhaofansym
2001-12-11
打赏
举报
回复
请高手帮帮我!
sql server
触发器
中
自动生成的临时表
此文档
中
详细的记载了,sql server
触发器
中
自动生成的临时表,希望可以帮到有需要的朋友们!
SQL server
触发器
实例
定义: 何为
触发器
?在SQL Server里面也就是对某一个表的一定的操作,触发某种条件,从而执行的一段程序。
触发器
是一个特殊的存储过程。 常见的
触发器
有三种:分别应用于Insert , Update ,
Delete
事件。 我为什么要使用
触发器
?比如,这么两个表: Create Table Student( --学生表 StudentID int primary key, --学号 .... ) Create Table BorrowRecord( --学生借书记录表 BorrowRecord int identity(1,1), --流水号 StudentID int , --学号 BorrowDate datetime, --借出时间 ReturnDAte Datetime, --归还时间 ... )
sqlserver
触发器
例子
sqlserver
触发器
例子 一﹕
触发器
是一种特殊的存储过程﹐它不能被显式地调用﹐而是在往
表
中
插入记录﹑更新记录或者
删除
记录时被自动地激活。所以
触发器
可以用来实现对表实施复杂的完整性约`束。 二﹕ SQL Server为每个
触发器
都创建了两个专用表﹕Inserted表和
Delete
d表。这两个表由系统来维护﹐它们存在于内存
中
而不是在数据库
中
。这两个表的结构总是与被该
触发器
作用的表的结构相同。
触发器
执行 完成后﹐与该
触发器
相关的这两个表也被
删除
。
Delete
d表存放由于执行
Delete
或Update语句而要从
表
中
删除
的所有行。 Inserted表存放由于执行Insert或Update语句而要向
表
中
插入的所有行。 三﹕Instead of 和 After
触发器
SQL Server2000提供了两种
触发器
﹕Instead of 和After
触发器
。这两种
触发器
的差别在于他们被激活的同﹕ Instead of
触发器
用于替代引起
触发器
执行的T-SQL语句。除表之外﹐Instead of
触发器
也可以用于视图﹐用来扩展视图可以支持的更新操作。 After
触发器
在一个Insert,Update或
Delete
d语句之后执行﹐进行约束检查等动作都在After
触发器
被激活之前发生。After
触发器
只能用于表。 一个表或视图的每一个修改动作(insert,update和
delete
)都可以有一个instead of
触发器
﹐一个表的每个修改动作都可以有多个After
触发器
。 四﹕
触发器
的执行过程 如果一个Insert﹑update或者
delete
语句违反了约束﹐那幺After
触发器
不会执行﹐因为对约束的检查是在After
触发器
被激动之前发生的。所以After
触发器
不能超越约束。 Instead of
触发器
可以取代激发它的操作来执行。它在Inserted表和
Delete
d表刚刚建立﹐其它任何操作还没有发生时被执行。因为Instead of
触发器
在约束之前执行﹐所以它可以对约束进行一些预处理。 五﹕使用T-SQL语句来创建
触发器
基本语句如下﹕ create trigger trigger_name on {table_name | view_name} {for | After | Instead of } [ insert, update,
delete
] as sql_statement 六﹕相关示例﹕ 1﹕在Orders
表
中
建立
触发器
﹐当向Orders
表
中
插入一条订单记录时﹐检查goods表的货品状态status是否为1(正在整理)﹐是﹐则不能往Orders表加入该订单。 create trigger orderinsert on orders after insert as if (select status from goods,inserted where goods.name=inserted.goodsname)=1 begin print 'the goods is being processed' print 'the order cannot be committed' rollback transaction --回滚﹐避免加入 end 2﹕在Orders表建立一个插入
触发器
﹐在添加一条订单时﹐减少Goods表相应的货品记录
中
的库存。 create trigger orderinsert1 on orders after insert as update goods set storage=storage-inserted.quantity from goods,inserted where goods.name=inserted.goodsname 3﹕在Goods表建立
删除
触发器
﹐实现Goods表和Orders表的级联
删除
。 create trigger goods
delete
on goods after
delete
as
delete
from orders where goodsname in (select name from
delete
d) 4﹕在Orders表建立一个更新
触发器
﹐监视Orders表的订单日期(OrderDate)列﹐使其不能手工修改. create trigger orderdateupdate on orders after update as if update(orderdate) begin raiserror(' orderdate cannot be modified',10,1) rollback transaction end 5﹕在Orders表建立一个插入
触发器
﹐保证向Orders表插入的货品名必须要在Goods
表
中
一定存在。 create trigger orderinsert3 on orders after insert as if (select count(*) from goods,inserted where goods.name=inserted.goodsname)=0 begin print ' no entry in goods for this order' rollback transaction end --insert
触发器
create trigger tri_infoDetails_i on info_details after insert as declare @id int begin --
delete
from info_details where id= select @id=id from inserted; insert into info_details_index(TYPE,TITLE,content,POST_TIME,FLAG) select type,title,content,getdate(),1 from info_details where id=@id; --update info_details_index set content=content end; -- update
触发器
--select top 0 type,title,content,getdate() as post_time,1 as flag into info_details_index from info_details; create trigger tri_infoDetails_u on info_details after update as declare @id int begin if exists(select 1 from inserted) if exists(select 1 from
delete
d) begin select @id=id from inserted; insert into info_details_index(TYPE,TITLE,content,POST_TIME,FLAG)select type,title,content,getdate(),-1 from info_details where id=@id; insert into info_details_index(TYPE,TITLE,content,POST_TIME,FLAG)select type,title,content,getdate(),1 from info_details where id=@id; end --update info_details_index set content=content end --
delete
触发器
create trigger tri_infoDetails_d on info_details after
delete
as declare @id int begin if exists(select 1 from
delete
d) begin insert into info_details_index(TYPE,TITLE, POST_TIME,FLAG) select type,title, getdate(),-1 from
delete
d info_details ; end end
利用
SQLServer
触发器
实现表跟踪.pdf
利用
SQLServer
触发器
实现表跟踪.pdf
Sqlserver
触发器
例子
Sqlserver
触发器
例子,
Sqlserver
触发器
例子,
Sqlserver
触发器
例子,
Sqlserver
触发器
例子
MS-SQL Server
34,873
社区成员
254,640
社区内容
发帖
与我相关
我的任务
MS-SQL Server
MS-SQL Server相关内容讨论专区
复制链接
扫一扫
分享
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章