运用SQL嵌套游标实现有重复记录的数据的单行显示

create PROCEDURE pro_lzw
@message varchar(100) out
AS
begin
declare @wsmessage varchar(200)
set @wsmessage='ok'
declare @dhhm char(11),@tcname char(40),@strtcname varchar(2000),@samedhhm char(11),@selectdhhm char(11)
declare @cur_tcname char(40)
declare @tbl_tcname table
(
tcname char(40)
)

set @strtcname=''
declare select_cur cursor for select dhhm from dishm
open select_cur
fetch next from select_cur into @selectdhhm
while 1=1
begin
if @@fetch_status<>0 break
if @@error>0
begin
set @wsmessage='运行过程中有错误!!!'
goto at_end2
end
insert into @tbl_tcname
select tcname from hmtcname where dhhm=@selectdhhm
declare cur_tcname cursor for select tcname from @tbl_tcname
open cur_tcname
fetch next from cur_tcname into @cur_tcname
while 1=1
begin
if @@fetch_status<>0 break
if @@error>0
begin
set @wsmessage='运行过程中有错误!!!'
goto at_end2
end
set @strtcname=@strtcname+convert(varchar(20),rtrim(ltrim(@cur_tcname)))+','
fetch next from cur_tcname into @cur_tcname
end
print @selectdhhm
print @strtcname
insert into hm_tcname(dhhm,tcname)
values(@selectdhhm,@strtcname)
set @strtcname=''
delete from @tbl_tcname
close cur_tcname
deallocate cur_tcname
fetch next from select_cur into @selectdhhm
end
close select_cur
deallocate select_cur
select dhhm,substring(ltrim(rtrim(tcname)),1,len(ltrim(rtrim(tcname)))-1) as tcname into hm_tcnamenew From hm_tcname
--select * from hm_tcnamenew
at_end2:
BEGIN TRANSACTION
if @wsmessage='ok'
commit
else
rollback
select message='成功转换!!'
end
GO
--CREATE TABLE [dbo].[hm_tc] (
--[dhhm] [char] (11) COLLATE Chinese_PRC_CI_AS NULL ,
--[tcid] [char] (20) COLLATE Chinese_PRC_CI_AS NULL
--) ON [PRIMARY]
--GO
--CREATE TABLE [dbo].[hm_tcname] (
--[dhhm] [char] (11) COLLATE Chinese_PRC_CI_AS NULL ,
--[tcname] [varchar] (2000) COLLATE Chinese_PRC_CI_AS NULL
--) ON [PRIMARY]
--GO

--CREATE TABLE [dbo].[hmtcname] (
--[dhhm] [char] (11) COLLATE Chinese_PRC_CI_AS NULL ,
--[tcname] [char] (40) COLLATE Chinese_PRC_CI_AS NULL
--) ON [PRIMARY]
--GO
--select distinct dhhm into dishm from hmtcname
--select *From hm_tc
--select * from tcidname
--select a.dhhm,b.tcname into hmtcname From hm_tc a,tcidname b where a.tcid=b.tcid order by dhhm desc
--select *From hmtcname
--select *From hm_tcname
--exec pro_lzw 'OK'


--sp_helptext'pro_hmtcname'
--select *From hmtcname
--select *from hm_tcname
--select *From hm_tcnamenew
--delete From hm_tcname

你可能感兴趣的:(sql)