Function 如何为我的案例修改TSQL替换表函数?

Function 如何为我的案例修改TSQL替换表函数?,function,tsql,Function,Tsql,我正在使用SSMS 2008,我有下面的表函数来获取文本字符串并从Microsoft Word中删除所有元标记。标签包含在中,一列中可以有任意数量的标签/记录 我创建了这个table函数来更新该列中的每一行 alter function dbo.ufn_StripHTML ( @Input varchar(8000), @Delimiter char(1) ) returns varchar(8000) as begin declare

我正在使用SSMS 2008,我有下面的表函数来获取文本字符串并从Microsoft Word中删除所有元标记。标签包含在中,一列中可以有任意数量的标签/记录

我创建了这个table函数来更新该列中的每一行

alter function dbo.ufn_StripHTML
    (   @Input      varchar(8000),
        @Delimiter  char(1)
    )
returns varchar(8000)
as

begin

    declare @Output varchar(8000)
    select  @Input = replace(replace(@input, '<', @Delimiter), '>', @Delimiter)

    select @Output = isnull(@Output, '') + s
    from    (    select   row_number() over (order by n.id asc) [i],
                 substring(@Delimiter + @Input + @Delimiter, n.id + 1, charindex(@Delimiter, @Delimiter + @Input + @Delimiter, n.id + 1) - n.id - 1) [s]
            from    [evolv_cs].[dbo].[progress_note] n
            where   n.id = charindex(@Delimiter, @Delimiter + @Input + @Delimiter, n.id) and
                 n.id <= len(@Delimiter + @Input)
            ) d
    where i % 2 = 1

    return @Output

end
但是ALTERVIEW不支持添加列。还有别的办法吗?这是我试图修改的原始临时表:

select [progress_note].[note_text], [progress_note].[event_log_id]
INTO #TEMP_PN
from [evolv_cs].[dbo].[progress_note]
group by [progress_note].[event_log_id], [progress_note].[note_text]
[注\文本]为varcharmax,事件\日志\ id为uniqueidentifier。所以[note_text]包含一堆字符。如何修改这个dbo.ufn_StripHTML函数


当然,如果我试图在table函数中用TEMP_PN替换[progress_note]table,它会出错,因为它无法识别它。那么,如何为我的案例修改此函数呢?

我不久前编写了一个函数来完成此操作。我鼓励你至少尝试一下

Create Function dbo.StripHTML(@HTML VarChar(max))
Returns VarChar(Max)
As
Begin

  While @HTML Like '%[<]%'
    Set @HTML = Stuff(@HTML, PatIndex('%[<]%', @HTML), CharIndex('>', @HTML, PatIndex('%[<]%', @HTML))-PatIndex('%[<]%', @HTML)+1, '')

  Set @HTML = Replace(@HTML, '&nbsp;', ' ')
  Set @HTML = Replace(@HTML, '&lt;', '<')
  Set @HTML = Replace(@HTML, '&gt;', '>')
  Set @HTML = Replace(@HTML, '&quot;', '"')
  Set @HTML = Replace(@HTML, '&amp;', '&')

  Return LTrim(RTrim(@HTML))
End

我更新了代码。有一个小的复制/粘贴错误。我还添加了示例用法。谢谢,但是我要找的是表函数,而不是标量函数。正如这个问题的标题所说,你原来问题中的函数也不是表值函数。它返回一个varchar8000,而不是一个表。
Create Function dbo.StripHTML(@HTML VarChar(max))
Returns VarChar(Max)
As
Begin

  While @HTML Like '%[<]%'
    Set @HTML = Stuff(@HTML, PatIndex('%[<]%', @HTML), CharIndex('>', @HTML, PatIndex('%[<]%', @HTML))-PatIndex('%[<]%', @HTML)+1, '')

  Set @HTML = Replace(@HTML, '&nbsp;', ' ')
  Set @HTML = Replace(@HTML, '&lt;', '<')
  Set @HTML = Replace(@HTML, '&gt;', '>')
  Set @HTML = Replace(@HTML, '&quot;', '"')
  Set @HTML = Replace(@HTML, '&amp;', '&')

  Return LTrim(RTrim(@HTML))
End
Select dbo.StripHTML('<p>This is some text</p>')
Select dbo.StripHTML(ColumnNameHere) From TableNameHere