我想在触发器中做如下操作,就是如果有"UPDATE order1 set status='6'"
这样一条语句的话就不做UPDATE操作,但是其它的UPDATE还是正常操作.
这样一条语句的话就不做UPDATE操作,但是其它的UPDATE还是正常操作.
解决方案 »
- 请教一个很折腾人的SQL语句
- 修改数据
- 我只想得到后面的数字 yuna 后面的数字,怎么做到??(也就是要得到 123 或者 8899 这个值)
- 关于数据表内数据顺序的问题!
- 这么简单的存储过程怎么写呀!帮帮我吧~
- sql2000 查询分析时 搜索中点查询下一个,找到的结果背景浅灰,看不清楚。
- 没有日志文件怎么恢复数据库 多谢并给分50
- 急,请教ContainsTABLE的问题.谢谢
- 我要更改表明名,但我定义了视图,怎么办?
- 奇怪的数据库连接问题,高手请进
- 从数据库服务器a可以直接拷贝数据库文件到数据库服务器b上使用吗?
- 怎样用"mydatabase"数据库的备份文件,恢复到一个名为"otherdb"的数据库?
begin
--语句
end
for tablename
on update,delete
as
if (select count(*) from deleted)>10
BEGIN
RAISERROR ('一次不能删除、修改多于10条记录',16, 1)
ROLLBACK TRANSACTION
ENDgo
这样一条语句的话就不做UPDATE操作
-----------------------------------------------是有这样的语句, 还是有这样的更新操作啊? 如果是语句的话, 得得到当前操作的语句做判断, 如果是检查有没有这样的更新动作, 那用触发器
create table testtri (
id int,
data varchar(20)
)
insert testtri
select 1,'1'
union all
select 2,'2'
union all
select 3,'3'
union all
select 4,'4'
union all
select 5,'5'--建立触发器
create trigger tr_testtri
on testtri
for update,delete
as
set nocount on
create table #t(EvebtType varchar(60),Parameters int,EventInfo varchar(2000))
declare @id varchar(20)
set @id=@@spid
insert #t
exec('DBCC INPUTBUFFER ('+@id+')')if exists (select 1 from #t where EventInfo not like '%where%')
BEGIN
RAISERROR ('删除、修改语句必须写where部分',16, 1)
ROLLBACK TRANSACTION
ENDgo
--测试删除
delete testtri/*结果
服务器: 消息 50000,级别 16,状态 1,过程 tr_testtri,行 14
删除、修改语句必须写where部分
DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。
*/
--检查结果
select * from testtri
--测试修改
update testtri set data='bad'/*结果
服务器: 消息 50000,级别 16,状态 1,过程 tr_testtri,行 14
删除、修改语句必须写where部分
DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。
*/
--检查结果
select * from testtri
update testtri set data='good' where id=1/*结果
DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。
*/--检查结果
select * from testtri
/*结果
id data
----------- --------------------
1 good
2 2
3 3
4 4
5 5(所影响的行数为 5 行)
*/