update时不允许更新某个字段

不穿内裤的超人 2016-09-11 07:23:19
字段如下
table1 --表名
id
name
sex
birth_date
cur
opname
rem
现在程序端写入该表的更新语句时,要使用触发器做到不能更新某几个字段,但是其它字段的更新要提交
不能修改的字段为 name(姓名)sex(性别)birth_date(生日)
id name sex birth_date cur opname rem
101 张三 男 1990-01-01 13:24:21 4 办公室 中层干部
写入一条update语句如下;
update table1 set name='李四',sex='女',cur=3,opname='后勤',rem='职工'
最后由于某些字段不能修改,执行该语句后结果如下:
id name sex birth_date cur opname rem
101 张三 男 1990-01-01 13:24:21 3 后勤 职工
如果每次update语句固定的话问题不大,但是每次update语句都不一样,不一定每次表里面的字段都更新到。
如何写一个通用的语句,使得特定的字段无法修改(一直保持第一次insert时候的值)
...全文
2308 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
yooq_csdn 2016-09-14
  • 打赏
  • 举报
回复
见个视图不带那几个字段好吗
Mo_DeNo 2016-09-13
  • 打赏
  • 举报
回复
其实update到sql后,会变成Delete,然后在Insert,所以ch21st那个方法应该是可行的。斑竹的那个方法,也顺便学习了
中国风 2016-09-12
  • 打赏
  • 举报
回复
CREATE TRIGGER tr_uTab ON dbo.table1
INSTEAD OF UPDATE
AS
SET NOCOUNT ON;
BEGIN

UPDATE t
SET Sex = i.Sex ,
opname = i.opname
--加上其它可更新列
FROM Inserted AS i
INNER JOIN table1 AS t ON i.ID = t.ID;

END
xiaoxiangqing 2016-09-12
  • 打赏
  • 举报
回复
最好在前台处理
道素 2016-09-12
  • 打赏
  • 举报
回复
试试看

CREATE TRIGGER [dbo].[trg_UpdateB] 
   ON  [dbo].[table1]
   AFTER UPDATE
AS 
BEGIN

	SET NOCOUNT ON;
	UPDATE t SET t. name =d. name ,t. name =d. name ,t. sex =d. sex ,t. birth_date =d. birth_date 
FROM table1  AS t INNER JOIN DELETED d ON d.id=t.id

END
卖水果的net 2016-09-11
  • 打赏
  • 举报
回复
两个方法: 1、写 update 时,不要更新这个字段; 2、增加一个字段,记录初始值,再写两个触发器, insert 后,把该字段值写到新字段中,当执行完 update 以后,把这个值再更新回来(注意别递归了);

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧