表fq
id lcbh parent
1 p00001 0
2 p0000101 1
3 p0000102 1
4 p000010101 2Create PROC fq
@ID int
ASIF EXISTS(SELECT MAX(lcbh) FROM fq WHERE parent = @ID)
begin在这里我想表达如果存在的话在最大的lcbh最后两位加1,如id为1时,现在最大的lcbh为p0000102,则我想得到p0000103,如果不存在只要原lcbh+'01'如id为3时,得到
p0000102+'01',结果为p000010201,下面的代码怎么写呀
id lcbh parent
1 p00001 0
2 p0000101 1
3 p0000102 1
4 p000010101 2Create PROC fq
@ID int
ASIF EXISTS(SELECT MAX(lcbh) FROM fq WHERE parent = @ID)
begin在这里我想表达如果存在的话在最大的lcbh最后两位加1,如id为1时,现在最大的lcbh为p0000102,则我想得到p0000103,如果不存在只要原lcbh+'01'如id为3时,得到
p0000102+'01',结果为p000010201,下面的代码怎么写呀
解决方案 »
- 100分 救救我吧!!!关于交叉表问题, 如果在交叉点显示的字段数据类型是文本,则将用哪个函数返回交叉点的值?
- 分区索引效率问题
- 在企业管理器里无缘无故会跑出一个 颜色是灰色的(有置疑字样的)
- 请教高手:SqlServer如何实现一致性读?
- 问一个标准SQL语句的问题
- 怎么表里没有逻辑字段??-------在线等
- 如何将一个数据库中某表中的记录复制到另一个数据库中相同表中。
- 新手提问-急
- 急呀,我有个小问题,我有个数据库其中有个字段是由自然数组成的字符串,现在我想按照其中的数字大小来排列记录
- 这个问题你知道为什麽吗?
- 为何使用@@identity、SCOPE_IDENTITY() 均获取不到id值?
- Sql Server 触发器问题
@ID int ,
@lcbh varchar(50) output --返回参数
AS
set @lcbh=null
SELECT @lcbh=MAX(lcbh) FROM fq WHERE parent = @ID
set @lcbh=left(@lcbh,len(@lcbh)-2)+right('00'+cast(cast(right(@lcbh,2) as int)+1 as varchar),2)
if @lcbh is null
SELECT @lcbh=lcbh+'01' FROM fq WHERE id = @ID
go
id int,
lcbh varchar(50),
parent int
)
insert fq select
1, 'p00001' , 0
union all select
2, 'p0000101' , 1
union all select
3, 'p0000102' ,1
union all select
4, 'p000010101' ,2
goCreate PROC pr_fq
@ID int ,
@lcbh varchar(50) output --返回参数
AS
set @lcbh=null
SELECT @lcbh=MAX(lcbh) FROM fq WHERE parent = @ID
set @lcbh=left(@lcbh,len(@lcbh)-2)+right('00'+cast(cast(right(@lcbh,2) as int)+1 as varchar),2)
if @lcbh is null
SELECT @lcbh=lcbh+'01' FROM fq WHERE id = @ID
godeclare @r varchar(50)
exec pr_fq 1,@r output
select @r--结果
--------------------------------------------------
p0000103(1 行受影响)
declare @r varchar(50)
exec pr_fq 3,@r output
select @r--结果--------------------------------------------------
p000010201(1 行受影响)
go
create table [fq]([id] int,[lcbh] varchar(20),[parent] int)
insert [fq]
select 1,'p00001',0 union all
select 2,'p0000101',1 union all
select 3,'p0000102',1 union all
select 4,'p000010101',2select * from [fq]if object_id(N'proc_fq',N'P') is not null drop proc proc_fq
go
create proc proc_fq
@id int
as
begin
declare @newbh varchar(20)
select @newbh=isnull(left(max(lcbh),len(max(lcbh))-2)+right(101+right(max(lcbh),2),2),(select lcbh+'01' from fq where id=@id))
from fq
where parent=@id
select @newbh
end
go--测试结果:
exec proc_fq 1
/*
p0000103
*/
exec proc_fq 3
/*
p000010201
*/
@ID int
AS declare @lcbh varchar(50)
SELECT @lcbh=MAX(lcbh) FROM fq WHERE parent = @ID
set @lcbh=left(@lcbh,len(@lcbh)-2)+right('00'+cast(cast(right(@lcbh,2) as int)+1 as varchar),2)
if @lcbh is null
SELECT @lcbh=lcbh+'01' FROM fq WHERE id = @ID
select @lcbh as lcbh
go--调用
exec pr_fq 1