SqlServer教程—第五章(编号处理)

SqlServer教程—第五章(编号处理),第1张

概述一、修改标识值 ------示例 CREATE TABLE t1(ID int IDENTITY,A int) INSERT t1 VALUES(1) INSERT t1 VALUES(2) INSERT t1 VALUES(3) DELETE FROM t1 WHERE A=2 GO ------将ID=3的记录的ID值改为2 SET IDENTITY_INSERT t1 ON INSERT t

一、修改标识值

------示例

CREATE table t1(ID int IDENTITY,A int)
INSERT t1 VALUES(1)
INSERT t1 VALUES(2)
INSERT t1 VALUES(3)
DELETE FROM t1 WHERE A=2
GO

------将ID=3的记录的ID值改为2
SET IDENTITY_INSERT t1 ON
INSERT t1(ID,A) SELECT 2,A FROM t1 WHERE ID=3
DELETE FROM t1 WHERE ID=3
SET IDENTITY_INSERT t1 OFF
SELECT * FROM t1
-------------结果
ID          A
-----------------

1           1
2           3

二、流水号

----------生成流水号

----------创建测试表
create table test(ID varchar(18),  --流水号,日期(8位)+时间(4位)+流水号(4位)
 name varchar(10)  --其他字段
)

go
----------创建生成流水号的触发器
create trigger t_insert on test
INSTEAD OF insert
as
declare @ID varchar(18),@ID1 int,@head varchar(12)
select * into #tb from inserted
set @head=convert(varchar,getdate(),112)+replace(convert(varchar(5),108),':','')
select @ID=max(ID) from test where ID like @head+'%'
if @ID is null
 set @ID1=0
else
 set @ID1=cast(substring(@ID,13,4) as int)
update #tb set @ID1=@ID1+1
 ,ID=@head+right('0000'+cast(@ID1 as varchar),4)
insert into test select * from #tb
go


-------插入数据,进行测试
insert into test(name)
select 'aa'
union all select 'bb'
union all select 'cc'

--------修改系统时间,再插入数据测试一次
insert into test(name)
select 'aa'
union all select 'bb'
union all select 'cc'

---------显示测试结果
select * from test


---------删除测试环境
drop table test

------------测试结果
ID                 name      
------------------ ----------
2004022720430001   aa
2004022720430002   bb
2004022720430003   cc
2004022720430004   aa
2004022720430005   bb
2004022720430006   cc

(所影响的行数为 6 行)

 

三、查表法生成流水号

--------下面的代码生成长度为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

 

四、生成纯数字随机编号

---------取得随机数的视图
CREATE VIEW v_RAND
AS
SELECT re=STUFF(RAND(),1,2,'')
GO

--------生成随机编号的函数
CREATE FUNCTION f_RANDBH(@BHLen int)
RETURNS varchar(50)
AS
BEGIN
 DECLARE @r varchar(50)
 IF NOT(ISNulL(@BHLen,0) BETWEEN 1 AND 50)
  SET @BHLen=10

lb_bh: -------生成随机编号的处理
 SELECT @r=re FROM v_RAND
 WHILE LEN(@r)<@BHLen
  SELECT @r=@r+re FROM v_RAND
 SET @r=left(@r,@BHLen)

 ----------检查编号在基础数据表中是否存在
 IF EXISTS(SELECT * FROM tb WITH(XLOCK,PAGLOCK) WHERE BH=@r)
  GOTO lb_bh

 RETURN(@r)
END
GO

---------创建引用生成随机编号的函数
CREATE table tb(
BH char(10) PRIMARY KEY DEFAulT dbo.f_RANDBH(10),
col int)

-------插放数据 BEGIN TRAN  INSERT tb(col) VALUES(1)  INSERT tb(col) VALUES(2)  INSERT tb(col) VALUES(3) COMMIT TRAN SELECT * FROM tb GO -------结果 BH                   col ------------------------------ ----------- 6128177354           1 7378536177           3 8387186129           2

总结

以上是内存溢出为你收集整理的SqlServer教程—第五章(编号处理)全部内容,希望文章能够帮你解决SqlServer教程—第五章(编号处理)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1180028.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-02
下一篇 2022-06-02

发表评论

登录后才能评论

评论列表(0条)

保存