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可以添加在存储过程中,用于存储过程吗
这一列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可以添加在存储过程中,用于存储过程吗
这一列b可以添加在存储过程中,用于存储过程吗
#4
在查询中计算列b和普通列一样使用,没什么区别。
只是不能更新(也不需要更新)而已。
和存储过程有什么关系。
只是不能更新(也不需要更新)而已。
和存储过程有什么关系。
#5
插入的时候用存储过程控制,或者插入之前先通过a的值判断一下B是什么值再插入就好了。没有必要用触发器