测试事例:
--下面是测试代码
CREATE TABLE [dbo].[JHXX_SP] (
[JHBH] [varchar] (11) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[SPMLB] [char] (2) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[JHCL] [numeric](10, 2) NULL ,
[HF] [numeric](4, 2) NULL ,
[WDL] [numeric](4, 2) NULL ,
[XXL] [numeric](4, 2) NULL
) ON [PRIMARY]
insert into JHXX_SP
select 'S0203200311','01',1,2,3,6
union all select 'S0203200311','02',1,2,3,6
union all select 'S0203200311','03',1,2,3,6
union all select 'S0203200311','04',1,2,3,6
union all select 'S0203200311','05',1,2,3,6
GO
--查询处理
declare @s1 varchar(8000),@s2 varchar(8000)
,@s3 varchar(8000),@s4 varchar(8000),@s5 varchar(8000)
,@i varchar(10)
select @s1='',@s2='',@s3='',@s4='',@s5='',@i='0'
select @s1=@s1+',@'+@i+' varchar(8000)'
,@s2=@s2+',@'+@i+'='''''
,@s3=@s3+'
select @'+@i+'=@'+@i+'+'',[''+[SPMLB]+'']=''+cast(['+name+'] as varchar) from JHXX_SP'
,@s4=@s4+',@'+@i+'=''select '''''+name+'''''''+@'+@i
,@s5=@s5+'+'' union all ''+@'+@i
,@i=cast(@i as int)+1
from syscolumns
where object_id('JHXX_SP')=id and name not in('JHBH','SPMLB')
select @s1=substring(@s1,2,8000)
,@s2=substring(@s2,2,8000)
,@s4=substring(@s4,2,8000)
,@s5=substring(@s5,16,8000)
exec('declare '+@s1+'
select '+@s2+@s3+'
select '+@s4+'
exec('+@s5+')')
go
drop table JHXX_SP 上述语句仅置换了4行,对代表字符串部分的字段没有显示,大家可在充分理解上述代码含意的基础上进行修改,注意在代码中exec中的sql语句中的' '单引号标识 应表示为'''' ''''的字符标识。
[此贴子已经被作者于2004-7-26 8:28:16编辑过] |