|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语句一样 建议用触发器
------解决方案--------------------直接使用存储过程了啊
先判断再添加!
不建议使用触发器!
触发器有的时候会对别的操作有干扰