我正在使用SSMS 2008,我有下面的表函數來獲取文本字符串並從Microsoft Word中刪除所有元標記。標籤包含在「< ...>」中,並且在一列中可以有任意數量的標籤/記錄。如何修改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] is varchar(max)and event_log_id is uniqueidentifier。因此[note_text]包含一串「<」和「>」字符。我如何修改這個dbo.ufn_StripHTML函數?
當然,如果我嘗試在表函數中用#TEMP_PN替換[progress_note]表,它將導致錯誤導致它無法識別它。那麼我怎樣才能修改這個功能呢?
這是一臺功能? – salvationishere
沒有。這是一個標量udf。 –
我更新了代碼。有一個小的複製/粘貼錯誤。我還添加了示例用法。 –