日期:2014-05-17  浏览次数:20383 次

约束
给一个列(此列不是主键和外键)添加约束,使约束为D+数字,数字为自动增长的
------解决方案--------------------
USE tempdb
GO
CREATE TABLE T(Col VARCHAR(50) )
go
ALTER TABLE T ADD CONSTRAINT CK_T_Col CHECK( Col LIKE 'D%' AND Col NOT LIKE 'D%[^0-9]%')

go

INSERT T SELECT 'D123456' --OK
INSERT T SELECT '123456' --Error
INSERT T SELECT 'F123456' --Error
DROP TABLE T

------解决方案--------------------
create table DD(
id int identity(1,1) NOT NULL,
D_ID  as 'D'+LTRIM(10000+id),--这里改成计算列,缺点是这个列是不能被更新的
name varchar(50) NULL,
 )
 go

insert into DD values('aa')
insert into DD values('aa')
insert into DD values('aa')
insert into DD values('aa')
select * from DD
/*
id D_ID name
1 D10001 aa
2 D10002 aa
3 D10003 aa
4 D10004 aa
*/

UPDATE DD SET D_ID='D10004' WHERE id=1
/*
消息 271,级别 16,状态 1,第 1 行
不能修改列 "D_ID",因为它是计算列,或者是 UNION 运算符的结果。

*/