帮我看一下,这个函数为什么会截断?并没有超出长度alter function dbo.getRelateAdress(@ContentID varchar(50))
returns varchar(50)
as
begin
Declare @RelateID int,@HtmlRUL nvarchar(100)
Select @RelateID = a.ID from CMS_InfoPublish_ContentSubject a
Where a.ContentID=@ContentID 
Select @HtmlRUL=(cast(a.htmlFilePath as varchar(100)) + cast(a.htmlFileName as varchar(100))) from CMS_InfoPublish_ContentSubject a Where a.ID = @RelateID
if(@HtmlRUL is null)
Select @HtmlRUL = URL from dbo.CMS_InfoPublish_Content Where ID = @ContentID
return @HtmlRUL
end

解决方案 »

  1.   


    --一眼看上去没问题
    --改改函数的返回长度
    returns varchar(200)--或者在赋值时指定top1试试
    --比如
    Select top 1 @HtmlRUL = URL from dbo.CMS_InfoPublish_Content Where ID = @ContentID
      

  2.   

    returns varchar(50)
    改成
    returns varchar(8000)
      

  3.   

    alter function dbo.getRelateAdress(@ContentID varchar(50))
    returns varchar(50)
    as
    begin
        Declare @RelateID int,@HtmlRUL nvarchar(100)    Select @RelateID = a.ID from CMS_InfoPublish_ContentSubject a
                Where a.ContentID=@ContentID 
        Select @HtmlRUL=(cast(a.htmlFilePath as varchar(100)) + cast(a.htmlFileName as varchar(100))) from CMS_InfoPublish_ContentSubject a Where a.ID = @RelateID
        if(@HtmlRUL is null)
            Select @HtmlRUL = URL from dbo.CMS_InfoPublish_Content Where ID = @ContentID
        return @HtmlRUL
    end
    改成一样的
      

  4.   

    问题应该出在
    Select @HtmlRUL = URL from dbo.CMS_InfoPublish_Content Where ID = @ContentID这一句你单独查询一下就可以看出是否超长了:Select len(URL) from dbo.CMS_InfoPublish_Content Where ID = '实际ID'
      

  5.   

    漏看一个地方,是两处alter function dbo.getRelateAdress(@ContentID varchar(50))
    returns varchar(1000)as
    begin
      Declare @RelateID int,@HtmlRUL nvarchar(1000) Select @RelateID = a.ID from CMS_InfoPublish_ContentSubject a
      Where a.ContentID=@ContentID  
      Select @HtmlRUL=(cast(a.htmlFilePath as varchar(100)) + cast(a.htmlFileName as varchar(100))) from CMS_InfoPublish_ContentSubject a Where a.ID = @RelateID
      if(@HtmlRUL is null)
      Select @HtmlRUL = URL from dbo.CMS_InfoPublish_Content Where ID = @ContentID
      return @HtmlRUL
    end
      

  6.   

    谢谢各位啦,找到了。。
    returns varchar(50) 的原因