27,580
社区成员
发帖
与我相关
我的任务
分享
declare @id int
set @id=1
--select * from employee where employeeid=@id
while(1=1)
begin
select * from employee where employeeid=@id
if(@@rowcount=0)
begin
break
end
else
begin
set @id=@id+1
end
end
select @id
create table tab_eg3
(id int,
name varchar(20)
)
insert into tab_eg3
select '1','小名' union all
select '2','张三' union all
select '3','李四' union all
select '4','王五' union all
select '5','小小' union all
select '7','大大' union all
select '9','大小'
select min(a.id) + 1 as id from tab_eg3 a left join tab_eg3 b on a.id + 1 = b.id where b.id is null
drop table tab_eg3
/*
id
-----------
6
*/
if object_id('t_user')is not null
drop table t_user
create table t_user
(id int,
name varchar(20)
)
insert into t_user
select '1','小名' union all
select '2','张三' union all
select '3','李四' union all
select '4','王五' union all
select '5','小小' union all
select '7','大大' union all
select '9','大小'
select number as id into #temp from master.dbo.spt_values where type='p' and number<1000
select id from #temp a where id<100 and not exists (select top 1 0 from t_user where id=a.id)
100以内没用过的ID全部出来了。
0
6
8
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
select number as id into #temp from master.dbo.spt_values where type='p' and number<1000
select id from #temp a where not exists (select top 1 0 from t_user where id=a.id)
SELECT * INTO # FROM TB
GO
TRUNCATE TABLE TB
GO
INSERT TB(字段列表) SELECT 字段列表 FROM # ORDER BY ID
GO
DROP TABLE #
DECLARE @T TABLE(ID INT IDENTITY,[NAME] VARCHAR(10))
INSERT @T SELECT 'A'
INSERT @T SELECT 'B'
DELETE @T WHERE ID=2
INSERT @T SELECT 'C'
INSERT @T SELECT 'D'
SELECT * FROM @T
SELECT ID=(SELECT COUNT(*) FROM @T WHERE ID<=T.ID),[NAME] FROM @T T
/*ID NAME
----------- ----------
1 A
3 C
4 D
(影響 3 個資料列)
ID NAME
----------- ----------
1 A
2 C
3 D
*/
if object_id('tab_eg3')is not null
drop table tab_eg3
create table tab_eg3
(id int,
name varchar(20)
)
insert into tab_eg3
select '1','小名' union all
select '2','张三' union all
select '3','李四' union all
select '4','王五' union all
select '5','小小' union all
select '7','大大' union all
select '9','大小'
select id=identity(int,1,1) ,name into #tab_eg3 from tab_eg3
select * from #tab_eg3
select id from #tab_eg3 a where id not in (select id from tab_eg3)
--1.融合了补号处理的流水号编号处理
--下面是使用补号法生成流水编号的用户定义函数,生成的编号总长度为8位,以BH开头,其余6位为流水号。
--得到新编号的函数
CREATE FUNCTION f_NextBH()
RETURNS char(8)
AS
BEGIN
DECLARE @r char(8)
SELECT @r='BH'+RIGHT(1000001+MIN(BH),6)
FROM(
SELECT BH=RIGHT(BH,6) FROM tb WITH(XLOCK,PAGLOCK)
UNION ALL SELECT 0
)a WHERE NOT EXISTS(
SELECT * FROM tb WITH(XLOCK,PAGLOCK)
WHERE BH='BH'+RIGHT(1000001+a.BH,6))
RETURN(@r)
END
GO
--在表中应用函数
CREATE TABLE tb(
BH char(8) PRIMARY KEY DEFAULT dbo.f_NextBH(),
col int)
GO
/*==================================================*/
--2.融合了补号处理的日期编号处理
--下面是使用补号法生成日期编号的用户定义函数,生成的编号总长度为12,前6位为日期信息,格式为YYMMDD,后6位为流水号。
--创建得到当前日期的视图
CREATE VIEW v_GetDate
AS
SELECT dt=CONVERT(CHAR(6),GETDATE(),12)
GO
--得到新编号的函数
CREATE FUNCTION f_NextBH()
RETURNS char(12)
AS
BEGIN
DECLARE @dt CHAR(6),@r char(12)
SELECT @dt=dt FROM v_GetDate
SELECT @r=@dt+RIGHT(1000001+MIN(BH),6)
FROM(
SELECT BH=RIGHT(BH,6) FROM tb WITH(XLOCK,PAGLOCK)
WHERE BH like @dt+'%'
UNION ALL SELECT 0
)a WHERE NOT EXISTS(
SELECT * FROM tb WITH(XLOCK,PAGLOCK)
WHERE BH like @dt+'%'
AND BH=@dt+RIGHT(1000001+a.BH,6))
RETURN(@r)
END
GO
--在表中应用函数
CREATE TABLE tb(
BH char(12) PRIMARY KEY DEFAULT dbo.f_NextBH(),
col int)