三个字段都有数据时第四个字段标识为1,否则为0

uxspy 2009-03-12 10:37:54
如题,请问如何实现
一个记录有N个字段,其中有三个特定字段A,B,C,当且仅当A,B,C都有数据时,字段D为1,否则为零,且D不允许手动输入,请问如何约束实现,谢谢
...全文
137 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
uxspy 2009-03-12
  • 打赏
  • 举报
回复
我觉悟了,蓉儿,你的做法最适合我,谢谢,收下了
claro 2009-03-12
  • 打赏
  • 举报
回复
帮顶。
uxspy 2009-03-12
  • 打赏
  • 举报
回复
OK,我想用check约束来完成了,谁告诉我约束表达式该怎么写,谢谢
uxspy 2009-03-12
  • 打赏
  • 举报
回复
用check约束的话check表达式怎么写,谢谢,是不是case when a is null or b is null then d=0 else d=1??
清海扬波 2009-03-12
  • 打赏
  • 举报
回复

declare @t table(a int,b varchar(20),c datetime,d money,e as case when isnull(a+b+c+d,0)=0 then 0 else 1 end)

用公式字段。
等不到来世 2009-03-12
  • 打赏
  • 举报
回复
可以用触发器
--给D列添加默认值
alter table tb add constraint DF_D default 0 for D
go
--创建触发器
create trigger tri_tb on tb
for insert,update
as
if update(D)
rollback --不允许手动设置

update tb
set D=0
from inserted i
where tb.id=i.id and (i.A is null or i.B is null or i.C is null)

update tb
set D=1
from inserted i
where tb.id=i.id and (i.A is not null and i.B is not null and i.C is not null)
go
uxspy 2009-03-12
  • 打赏
  • 举报
回复
请问我这个需求在mssql里叫,规则,还是约束?,还是函数?
uxspy 2009-03-12
  • 打赏
  • 举报
回复
我这个D字段在数据库中建好了,是个bit字段,我想问怎么把这个约束,或者函数加上去,to:大乌龟
怎么用查询
dawugui 2009-03-12
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 uxspy 的回复:]
谢谢,我现在表已经建好了,请问在哪个地方可以修改?
[/Quote]
还是用查询吧,如1楼,你这个D字段确实没有.
uxspy 2009-03-12
  • 打赏
  • 举报
回复
谢谢,我现在表已经建好了,请问在哪个地方可以修改?
chuifengde 2009-03-12
  • 打赏
  • 举报
回复
create table test1(a int,b varchar(20),c smalldatetime,d as case WHEN a IS NULL OR b IS NULL OR c IS NULL  then 0 else 1 end)

INSERT test1 SELECT NULL,'fas',GETDATE()
INSERT test1 SELECT 1,'fas',GETDATE()

SELECT * FROM test1
--result
/*a b c d
----------- -------------------- ------------------------------------------------------ -----------
NULL fas 2009-03-12 10:50:00 0
1 fas 2009-03-12 10:50:00 1

(所影响的行数为 2 行)

*/

22,209

社区成员

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

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