1 CREATE PROCEDURE [dbo].[QUERY_TABLE](@conn varchar(200),@title varchar(200),@desc varchar(max),@query nvarchar(max),@link_ref nvarchar(max), 2 @html nvarchar(max) output) 3 AS 4 BEGIN 5 -- SET NOCOUNT ON added to prevent extra result sets from 6 -- interfering with SELECT statements. 7 SET NOCOUNT ON; 8 9 -- Insert statements for procedure here 10 -- @link_ref: default delimiter is colon. 11 12 if object_id('tempdb..##t') is not null drop table ##t 13 14 declare @exec_query nvarchar(max) 15 set @exec_query='select * into ##t from openrowset(''SQLOLEDB'','''+@conn+''',''SET FMTONLY OFF; SET NOCOUNT ON; '+replace(@query,'''','''''')+''') a' 16 exec sp_executesql @exec_query 17 --select * from ##t 18 if exists(select * from ##t) 19 begin 20 select name as nm,type_name(system_type_id) as tp into #fd from tempdb.sys.all_columns where object_id=object_id('tempdb..##t') 21 --select * from #fd 22 declare @ref table(OKey varchar(max),OValue varchar(max)) 23 if len(@link_ref)>0 insert into @ref select distinct * from StringToDic(@link_ref,';',':') 24 --select distinct * into #ref from StringToDic(@link_ref,';',':') 25 declare @th varchar(max) 26 select @th=cast((select [*]=nm from #fd where nm not in (select OValue from @ref) for xml path('th'),type) as nvarchar(max)) 27 declare @h nvarchar(max),@tr nvarchar(max),@chtml nvarchar(max) 28 select @h=isnull(@h+',','')+case when tp in ('numeric','datetime','int') then '[td_r]' else '[td]' end+'='+ 29 case when b.OValue is not null then '''<a href=''''''+'+b.OValue+'+''''''>''+' else '' end+ 30 case tp when 'numeric' then 'cast(cast(isnull(['+nm+'],0) as decimal(18,2)) as varchar(max))' 31 when 'datetime' then 'isnull(convert(varchar(10),['+nm+'],120),'''')' else 'isnull(['+nm+'],'''')' end + 32 case when b.OValue is not null then '+''</a>''' else '' end +',''''' 33 from #fd a left join @ref b on a.nm=b.OKey where a.nm not in (select OValue from @ref) 34 select @h='select @chtml=cast((select '+@h+' from ##t for xml path(''tr1'')) as nvarchar(max))' 35 --print @h 36 exec sp_executesql @h,N'@chtml nvarchar(max) output',@tr output 37 38 select @tr=replace(@tr,'<td_r>','<td style="text-align:right">') 39 select @tr=replace(@tr,'</td_r>','</td>') 40 select @tr=replace(@tr,'<tr1>','<tr style="">') 41 select @tr=replace(@tr,'</tr1>','</tr>') 42 select @tr=replace(@tr,'<','<') 43 select @tr=replace(@tr,'>','>') 44 45 select @html='<h2>'+@title+'</h2><p>'+isnull(@desc,'')+'</p><table rules="all" cellspacing="2" cellpadding="3" border="1"><tr>'+@th+'</tr>'+@tr+'</table>' 46 select @html='<div>'+@html+'</div>' 47 end 48 else 49 select @html='<h2>'+@title+'</h2><p>'+isnull(@desc,'')+'</p><p>No record.</p>' 50 51 END