如何在数据库端检查用户修改的记录是否符合约定的规范?

sblsongdongf 2010-06-02 07:38:02
环境: SQL Server 2000
问题:有表Tab_Apartment (房子),表中的字段RoomNo(房间号)必须要是4位数 char(4)。例如1202表示12楼2号。
6楼2号则必须写成0602.
那我怎么才能自动地将用户插入或者修改的不规范值602改成0602呢?
是通过触发器吗?这样的触发器该怎么写?
下面的写法行吗?
CREATE TRIGGER [tr_Apartment_RoomNo] ON [dbo].[Tab_Apartment ]
FOR INSERT, UPDATE
AS
update Tab_Apartment set RoomNo='0'+RoomNo
from Tab_Apartment P, Inserted I
where P.aid=I.aid
and len(I.RoomNo)=3 --3位数
...全文
73 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
sblsongdongf 2010-06-03
  • 打赏
  • 举报
回复
还有哪位兄弟能给点专业意见吗?
sblsongdongf 2010-06-03
  • 打赏
  • 举报
回复
所以呢,我不是要加 check,也不是要什么流水号
sblsongdongf 2010-06-03
  • 打赏
  • 举报
回复
谢谢兄弟们的参与,我的意思是,要能自动地帮他们补齐。并不是简单地限制他们。因为客户端不是我实现的。所以我不能在客户端检查对方的输入情况。
永生天地 2010-06-02
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 htl258 的回复:]
触发器能不用就不用,如果不用自动修改,可增加一个CHECK约束处理。
SQL code
ALTER TABLE Tab_Apartment ADD CHECK(LEN(RoomNo)<4)
[/Quote]
改一下吧
ALTER TABLE Tab_Apartment ADD CHECK(LEN(RoomNo)=4)
--小F-- 2010-06-02
  • 打赏
  • 举报
回复
环境: SQL Server 2000
问题:有表Tab_Apartment (房子),表中的字段RoomNo(房间号)必须要是4位数 char(4)。例如1202表示12楼2号。
6楼2号则必须写成0602.
那我怎么才能自动地将用户插入或者修改的不规范值602改成0602呢?

用流水号..
htl258_Tony 2010-06-02
  • 打赏
  • 举报
回复
触发器能不用就不用,如果不用自动修改,可增加一个CHECK约束处理。

ALTER TABLE Tab_Apartment ADD CHECK(LEN(RoomNo)<4)
sblsongdongf 2010-06-02
  • 打赏
  • 举报
回复
兄弟,我问的重心是触发器性能。。。。。。。。。
以及这样的触发器是否会导致循环触发?
htl258_Tony 2010-06-02
  • 打赏
  • 举报
回复
CREATE TRIGGER [tr_Apartment_RoomNo] ON [dbo].[Tab_Apartment ]
FOR INSERT, UPDATE
AS
UPDATE Tab_Apartment
SET RoomNo = RIGHT('0000'+RTRIM(I.RoomNo), 4)
FROM Tab_Apartment P, Inserted I
WHERE P.aid = I.aid
AND LEN(I.RoomNo)<4
GO
modify
htl258_Tony 2010-06-02
  • 打赏
  • 举报
回复
CREATE TRIGGER [tr_Apartment_RoomNo] ON [dbo].[Tab_Apartment ]
FOR INSERT, UPDATE
AS
UPDATE Tab_Apartment
SET RoomNo = RIGHT('0000'+LTRIM(RoomNo), 4)
FROM Tab_Apartment P, Inserted I
WHERE P.aid = I.aid
AND LEN(I.RoomNo)<4
GO

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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