2011-10-24 6 views
1

SSMS 2008を使用していて、次の表機能を使用してテキスト文字列を取り、Microsoft Wordからすべてのメタタグを削除します。タグは "< ...>"で囲まれており、1つの列に任意の数のタグ/レコードが存在できます。TSQLを変更する方法私のケースのテーブル機能を置き換えますか?

この表関数を作成してこの列の各行を更新しました。

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 

このテーブル関数は、[progress_note]に "id" int列がある場合に機能します。しかし、そうではなく、intカラムを追加することでこのテーブルを変更することはできません。だから問題は、私は一時テーブル上でこの関数を使用しようとしているということです。

私はこのテーブルに基づいてビューを作成し、それにPK int列を追加しようとしました。私は、この追加のPK int型カラム(「ID」)を使用してビューを作成しようとしたとき、それは私にエラー与えたので:

Msg 156, Level 15, State 1, Line 1 
Incorrect syntax near the keyword 'identity'. 

をしかし、ALTER VIEWは、列を追加サポートしていません。これを行う別の方法がありますか?ここに私のオリジナルの一時テーブルがある私は、変更しようとしています:

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] 

は[note_text] varchar型(最大)とevent_log_idですUNIQUEIDENTIFIER。だから[note_text]には "<"と ">"という文字列が含まれています。このdbo.ufn_StripHTML関数を変更するにはどうすればよいですか?

もちろん、[progress_note]テーブルをテーブル関数の#TEMP_PNに置き換えようとすると、それを認識できないためエラーになります。どうすれば私の場合にこの機能を変更できますか?

答えて

0

私はこれを行う前に関数を書きました。私は少なくともそれを試してみることをお勧めします。

Select dbo.StripHTML('<p>This is some text</p>') 

または

Select dbo.StripHTML(ColumnNameHere) From TableNameHere 
+0

が、これが表関数です:

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 

あなたはこのような関数を呼び出すでしょうか? – salvationishere

+0

番号。これはスカラーudfです。 –

+0

私はコードを更新しました。小さなコピー/貼り付けエラーがありました。私はまた、使用例を追加しました。 –

関連する問題