一张表插入一条数据,修改一个字段的值

时间:2021-04-13 15:07:21
一张表中插入一条数据若a字段is not null 则将b字段改为1 如何实现(a,b在同一表中)写个触发器还是怎么实现

5 个解决方案

#1


可以考虑做成计算列
ALTER TABLE table1
    DROP COLUMN b;

ALTER TABLE table1
    ADD b AS (CASE WHEN a IS NOT NULL THEN 1 ELSE 0 END);

#2




create table test(id int identity , a int , b int )
go
create trigger test_ins
on test for insert 
as
begin
  update test 
     set b = 1 
   where id in (select id from inserted)
     and a is null 
end
go
insert into test (a,b) values(1,100)
insert into test (a,b) values(2,100)
insert into test (a,b) values(null,100)
go
select * from test 
go
drop table test 
go

id          a           b
----------- ----------- -----------
1           1           100
2           2           100
3           NULL        1

(3 行受影响)


#3


@#1
 这一列b可以添加在存储过程中,用于存储过程吗

#4


在查询中计算列b和普通列一样使用,没什么区别。
只是不能更新(也不需要更新)而已。
和存储过程有什么关系。

#5


插入的时候用存储过程控制,或者插入之前先通过a的值判断一下B是什么值再插入就好了。没有必要用触发器

#1


可以考虑做成计算列
ALTER TABLE table1
    DROP COLUMN b;

ALTER TABLE table1
    ADD b AS (CASE WHEN a IS NOT NULL THEN 1 ELSE 0 END);

#2




create table test(id int identity , a int , b int )
go
create trigger test_ins
on test for insert 
as
begin
  update test 
     set b = 1 
   where id in (select id from inserted)
     and a is null 
end
go
insert into test (a,b) values(1,100)
insert into test (a,b) values(2,100)
insert into test (a,b) values(null,100)
go
select * from test 
go
drop table test 
go

id          a           b
----------- ----------- -----------
1           1           100
2           2           100
3           NULL        1

(3 行受影响)


#3


@#1
 这一列b可以添加在存储过程中,用于存储过程吗

#4


在查询中计算列b和普通列一样使用,没什么区别。
只是不能更新(也不需要更新)而已。
和存储过程有什么关系。

#5


插入的时候用存储过程控制,或者插入之前先通过a的值判断一下B是什么值再插入就好了。没有必要用触发器