1.需求
我们的客户对于报表的要求很高,对于所有的字母和数字都要新罗马字体,对于汉字要求是宋体,那么我们的数据是如下的情况,要显示在table上怎么办
基于上面的问题我们做了个字体的处理
如果用上面的办法可以解决问题
2.问题
我们遇到个问题因为我们的数据是个集合,一个字段显示的可能是多条数据,我们使用了stuff函数,出现了转义字符
所以我们的报表显示不正常。
3.解决
通过查询资料特殊拼接字符会出现转义字符stuff急救室特殊拼接函数。
但是我们发现数据库自己的数据是不会被转义的如下图
4.猜想
如果我们把拼接转换的字符串设置一个数据库NVARCHAR的类型是否还会出现
下面展示一些 内联代码片
。
select Sort,PaName,Unit,MLPName ,
VALUE_S = stuff((select ',' + CASE WHEN CHARINDEX(N'未检出(定量限', t.VALUE_S)
= 1 THEN N'<span style="font-family:宋体">未检出(定量限:</span><span style="font-family:Times New Roman">' + replace(replace(t.VALUE_S,
N'未检出(定量限:', ''), N')', '')
+ N'</span><span style="font-family:宋体">)</span>' WHEN CHARINDEX(N'未检出(检出限', t.VALUE_S)
= 1 THEN N'<span style="font-family:宋体">未检出(检出限:</span><span style="font-family:Times New Roman">' + replace(replace(t.VALUE_S,
N'未检出(检出限:', ''), N')', '') + N'</span><span style="font-family:宋体">)</span>' WHEN ISNUMERIC(t.VALUE_S)
= 1 OR
CHARINDEX(N'<', t.VALUE_S)
= 1 THEN N'<span style="font-family:Times New Roman">' + t.VALUE_S + N'</span>' ELSE N'<span style="font-family:宋体">'
+ t.VALUE_S + N'</span>' END from [RndSuite].[RndtScPa] t where t.PA=b.PA and t.SC in(
select SC from[RndSuite].[RndtScAu] where VALUE=N'1Z19QT138A'and AU=11) for XML path(''),TYPE).value('.','NVARCHAR(MAX)') , 1 , 1 , '')
from[RndSuite].[RndtScPa]b
join [dbo].[Report_Template] c on b.PA=c.PaId
where b.SC in(
select SC from[RndSuite].[RndtScAu] where VALUE=N'1Z19QT138A'and AU=11)
and c.SampleTypeName=N'星飞帆3段幼儿配方奶粉听装700g' and c.PaId is not null
group by PA_SHORT_DESC,PA,DESCRIPTION,PA,c.Sort,c.PaName,c.Unit,c.MLPName
order by c.Sort
核心函数
select SC from[RndSuite].[RndtScAu] where VALUE=N'1Z19QT138A'and AU=11) for XML path(''),TYPE).value('.','NVARCHAR(MAX)') , 1 , 1 , '')
下面代码是借鉴过来的
,TYPE).value('.','NVARCHAR(MAX)')
意思是给查询出的值设置一个类型为NVARCHAR
优化完成如下图