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に置き換えようとすると、それを認識できないためエラーになります。どうすれば私の場合にこの機能を変更できますか?
が、これが表関数です:
あなたはこのような関数を呼び出すでしょうか? – salvationishere
番号。これはスカラーudfです。 –
私はコードを更新しました。小さなコピー/貼り付けエラーがありました。私はまた、使用例を追加しました。 –