日期:2014-05-19  浏览次数:20510 次

|M| 没有学过SQL触发器,今天突然想到一个问题,不知道是不是用触发器的。
比如我有表
tb  
id       name

当我用
insert   into   tb   ([name])   values   ( '张三 ')
这样插入一条数据的时候
Sql自动判断name如果是‘张三’那就换成‘李四’
也就是结果为
id       name
1         李四

谢谢

------解决方案--------------------
up
------解决方案--------------------
在数据库里加个触发器
------解决方案--------------------
--建立測試環境
Create Table tb
(id Int,
name Nvarchar(10))
GO
--建立觸發器
Create Trigger TR_tb On tb
Instead of Insert
As
Begin
Insert tb
Select
id,
(Case name When N '张三 ' Then N '李四 ' Else name End) As name
From
Inserted
End
GO
--測試
insert into tb Select 1, N '张三 '
Union All Select 2, N '王五 '

Select * From tb
GO
--刪除測試環境
Drop Table tb
--結果
/*
id name
1 李四
2 王五
*/
------解决方案--------------------
假设表名为A CREATE TRIGGER tgrname ON [dbo].[A] FOR INSERT ,UPDATE AS declare @id int declare @name nvarchar(20) select @id= id,@name = name from inserted if @name= '张三 ' begin update A set name = '李四 ' where id = @id end
------解决方案--------------------
可以在插入之前替换,也可以用触发器
------解决方案--------------------
如楼上所言
------解决方案--------------------
仁者见仁智者见智的问题,图方便就在程序里控制

这样的问题我是不太喜欢用触发器的,一般执行相关数据库操作的时候如果该表

和其他表有关联用到,其它方面的需求目前还比较少遇到,执行数据库操作的时候

触发一个事件而已,而这个事件是sql语句集
------解决方案--------------------

------解决方案--------------------
不用也可以,用也没错.看你喜欢那种方式了.
------解决方案--------------------
如果对于初发起还不是太熟的话,建议在成立里面判断。

因为如果触发器使用不当的话,会对其他的操作带来影响,而且不容易找到错误的原因。

而且触发器也不太容易管理。
------解决方案--------------------
这个问题不必用触发器啊,直接在程序里面判断就行了啊!
杀鸡用牛刀啦!
------解决方案--------------------
可以在插入之前替换,也可以用触发器


同意……
------解决方案--------------------
触发器就和普通sql语句一样 建议用触发器
------解决方案--------------------
直接使用存储过程了啊
先判断再添加!
不建议使用触发器!
触发器有的时候会对别的操作有干扰