当前位置: 代码迷 >> Sql Server >> 表值函数只得处理单条数据,不知道原因
  详细解决方案

表值函数只得处理单条数据,不知道原因

热度:94   发布时间:2016-04-24 08:49:12.0
表值函数只能处理单条数据,不知道原因
函数代码

ALTER FUNCTION [dbo].[f_shjsjyw]
(
-- Add the parameters for the function here
@name nvarchar(max)

)
 returns   @temp   table(F1   varchar(500))     
AS
BEGIN
-- Fill the table variable with the rows for your result set
declare @title   as   varchar(max)
declare @left as int
declare @right as int
set @title=@name
set @left=CHARINDEX('<ul class=''ul_C1''><li class=''li_C1''><table><tr><td width=600>',@title) 
set @right=CHARINDEX('</ul>',@title)
while @left>=1
begin
insert  @temp values (LEFT(@title,@right+4))
 set @title=right(@title,LEN(@title)-@right+2)
  set @left=CHARINDEX('<ul class=''ul_C1''><li class=''li_C1''><table><tr><td width=600>',@title) 
     set @right=CHARINDEX('</ul>',@title)
     end
RETURN 
END


测试数据

 <ul class='ul_C1'><li class='li_C1'><table><tr><td width=600><a href='ITEM_D.jsp?id=D14012616'>测试系统</a><td class='li_C1' align=right>2014-11-25</td></tr></table><li class='li_C2'>我公司需要对生产的产品和原材料要进行性能检测,由于国家对管理很严格,我公司只能把产品和材料拿到国家权威机构进行检测,往往需要十天半个月的,这样很耽误时间,同时还需要承担非常昂贵的检测费用。所以<a href='ITEM_D.jsp?id=D14012616'>...</a></ul><ul class='ul_C1'><li class='li_C1'><table><tr><td width=600><a href='ITEM_D.jsp?id=D14012615'>运动场地铺地材料检测服务</a><td class='li_C1' align=right>2014-11-20</td></tr></table><li class='li_C2'>本项目“运动场地铺地材料检测服务”主要是研发出的一种运动场地铺地材料测试仪和关于冲击吸收率、垂直变形等特性的测试方法。 本项目研发的测试仪器具有测量这两个数据的功能,节省了时间,节约了资源,是一种一<a href='ITEM_D.jsp?id=D14012615'>...</a></ul>

直接调用可以,一张表存一条数据调用也可以,但是一张表存多条数据的时候,就没法处理了,处理到第二条的时候就过不去,一直执行中,也不报错
------解决思路----------------------
把这段代码
SET @title = RIGHT( @title, DATALENGTH(@title) - (@right+2) )
替换为
SET @title = SUBSTRING( @title,@right + 5 ,DATALENGTH(@title) )

------解决思路----------------------

insert  @temp values (LEFT(@title,@right+4))
     set @title=right(@title,LEN(@title)-@right+2)

这2句中的数字错得太离谱了,先用简单字符测试一下就知道了。
  相关解决方案