首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

sql server 插入解决方法

2012-01-22 
sql server 插入请问:有一张表,有两个字段,id(主键) 和 name ,我现在给name列插入值,怎么才能让id列自动插

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      aa2           00002      bb(2 行受影响)
[解决办法]
SQL code
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 行受影响)*/
[解决办法]
SQL code
--下面的代码生成长度为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--*/ 

热点排行