sql server 插入
请问:
有一张表,有两个字段,id(主键) 和 name ,我现在给name列插入值,怎么才能让id列自动插入varchar类型的值呢?
就想标识列自动增长一样的效果,但是不要int 要varchar
求解!
[解决办法]
create table tb(no int identity(1,1),id as right('0000'+rtrim(no),5) ,name varchar(10))insert into tb select 'aa' union select 'bb'select * from tb/*no id name----------- ---------- ----------1 00001 aa2 00002 bb(2 行受影响)
[解决办法]
if object_id('tb') is not null drop table tbgoif object_id('uf_id') is not null drop function uf_idgo--创建一个获取最大值的自定义函数create function uf_id()returns varchar(10)asbegin declare @id varchar(10) select @id=isnull(max(id)+1,1) from tb return(@id)endgocreate table tb( id varchar(10) default dbo.uf_id(), --默认值设置为自定义函数 name varchar(10))goinsert into tb(name) values ('张三')insert into tb(name) values ('李四')insert into tb(name) values ('王五')select * from tb/*id name---------- ----------1 张三2 李四3 王五(3 行受影响)*/
[解决办法]
--下面的代码生成长度为8的编号,编号以BH开头,其余6位为流水号。--得到新编号的函数CREATE FUNCTION f_NextBH()RETURNS char(8)ASBEGIN RETURN(SELECT 'BH'+RIGHT(1000001+ISNULL(RIGHT(MAX(BH),6),0),6) FROM tb WITH(XLOCK,PAGLOCK))ENDGO--在表中应用函数CREATE TABLE tb(BH char(8) PRIMARY KEY DEFAULT dbo.f_NextBH(),col int)--插入资料BEGIN TRAN INSERT tb(col) VALUES(1) INSERT tb(col) VALUES(2) INSERT tb(col) VALUES(3) DELETE tb WHERE col=3 INSERT tb(col) VALUES(4) INSERT tb(BH,col) VALUES(dbo.f_NextBH(),14)COMMIT TRAN--显示结果SELECT * FROM tb/*--结果BH col ---------------- ----------- BH000001 1BH000002 2BH000003 4BH000004 14--*/