Я использую SSMS 2008 и имею следующую скалярную функцию, чтобы взять текстовую строку и удалить все метатеги из Microsoft Word.Теги заключены в «<...>», и в одном столбце может быть любое количество тегов / записей.
Я создал скалярную функцию на основе этого кода ниже, чтобы обновить каждую строку в этом столбце.Но эта скалярная функция занимает очень много времени.Будет ли версия табличной функции быстрее?Если так, как я мог переписать эту функцию, чтобы она стала таблицей?
WHILE PATINDEX( '%[%]%', @str ) > 0
SET @str = REPLACE( @str, SUBSTRING( @str,
PATINDEX( '%[%]%', @str ), 1 ), '' )
SELECT @str
Эта табличная функция почти работает.Но оказывается, что сейчас это не работает.Проблема в том, что я пытаюсь использовать эту функцию для временной таблицы.И исходная таблица не имеет int PK, и я не могу добавить столбец к исходной таблице.
Поэтому я попытался создать представление на основе этой таблицы, а затем добавить в нее столбец PK int.Потому что, когда я пытался создать представление с помощью этого дополнительного столбца PK int ("n"), он выдал ошибку:
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 (max), а event_log_id - уникальный идентификатор.Поэтому [note_text] содержит несколько символов "<" и ">".Как я могу изменить эту функцию dbo.ufn_StripHTML?
Я попробовал ваш последний код, и это очень быстро !!Однако после 5700 строк я получил следующую ошибку:
Msg 537, Level 16, State 2, Line 1
Invalid length parameter passed to the LEFT or SUBSTRING function.
Знаешь ли ты, о чем это?