Подтвердить что ты не робот

SQL Server находит и заменяет в поле TEXT

У меня есть база данных в SQL Server 2005, которая была создана из SQL Server 2000 и по-прежнему использует поля типа TEXT вместо varchar (max).

Мне нужно найти и заменить строку символов в текстовом поле, но все примеры того, как это сделать, что я нашел, не похоже, что они будут работать для меня. Кажется, что команда UPDATETEXT требует, чтобы два параметра "insert_offset" и "delete_length" были установлены явно, но строка, которую я ищу, могла отображаться в тексте в любой точке или даже в нескольких точках одной и той же ячейки. Мое понимание этих двух параметров заключается в том, что строка im search for всегда будет в одном месте, так что insert_offset - это количество пробелов в тексте, которое команда UPDATETEXT начнет заменять текст.

Пример: нужно найти: &lt;u&gt; и заменить его на: <u>

Пример текстового поля:

*Everyone in the room was <b>&lt;u&gt;tired&lt;/u&gt;.</b><br>Then they woke <b>&lt;u&gt;up&lt;/u&gt;.

Может ли кто-нибудь помочь мне с этим? СПАСИБО!

4b9b3361

Ответ 1

Я, наконец, понял это. Он был похоронен в комментариях к опубликованной статье jfrobishow. Большое вам спасибо.

Вот весь ответ, который привел меня к решению:

quote: Первоначально опубликовано fredclown

Если вы используете SQL 2005, вы можете использовать replace с типом текста. Все, что у вас есть сделать это ниже...

field = replace (cast (поле как varchar (max)), 'string', 'replacement')

Просто как пирог.

Два больших пальца до Фредклауна!!! команда работайте как прелесть для меня также. Эта это то, что я написал свой документ Update для Найти и заменить в текстовом поле в База данных SQL Server 2005

UPDATE TableName SET DBTextField = REPLACE(CAST(DBTextField AS varchar(MAX))
                                               ,'SearchText', 'ReplaceText')
FROM TableName
WHERE CHARINDEX('SearchText',CAST(DBTextField as varchar(MAX)))>0

Примечание: это может усекать размер вашего dbfield, но если это длинный текстовый столбец, сделайте его nvarchar (max) и вы не должны получать никаких усечений!