日期:2014-05-18  浏览次数:20791 次

sql server 插入
请问:
  有一张表,有两个字段,id(主键) 和 name ,我现在给name列插入值,怎么才能让id列自动插入varchar类型的值呢?
就想标识列自动增长一样的效果,但是不要int 要varchar
求解!

------解决方案--------------------
SQL code
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      aa
2           00002      bb

(2 行受影响)

------解决方案--------------------
SQL code

if object_id('tb') is not null
   drop table tb
go
if object_id('uf_id') is not null
   drop function uf_id
go
--创建一个获取最大值的自定义函数
create function uf_id()
returns varchar(10)
as
begin
  declare @id varchar(10)
  select @id=isnull(max(id)+1,1) from tb
  return(@id)
end
go
create table tb
(
 id varchar(10) default dbo.uf_id(),  --默认值设置为自定义函数
 name varchar(10)
)
go
insert into tb(name) values ('张三')
insert into tb(name) values ('李四')
insert into tb(name) values ('王五')
select * from tb
/*
id         name
---------- ----------
1          张三
2          李四
3          王五

(3 行受影响)
*/

------解决方案--------------------
SQL code
--下面的代码生成长度为8的编号,编号以BH开头,其余6位为流水号。
--得到新编号的函数
CREATE FUNCTION f_NextBH()
RETURNS char(8)
AS
BEGIN
    RETURN(SELECT 'BH'+RIGHT(1000001+ISNULL(RIGHT(MAX(BH),6),0),6) FROM tb WITH(XLOCK,PAGLOCK))
END
GO

--在表中应用函数
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  1
BH000002  2
BH000003  4
BH000004  14
--*/