Тип данных TEXT
равен устарел и больше не должен использоваться - именно потому, что он неуклюж и не поддерживает все обычные методы работы со строками.
Из документов MSDN по тексту, ntext, изображению:
типы данных ntext, text и image будут
быть удаленным в будущей версии
MicrosoftSQL Server. Избегайте использования этих
типы данных в новых разработках,
и планируют изменить приложения, которые
в настоящее время использую их. Используйте nvarchar (max),
varchar (max) и varbinary (max)
вместо .
Моя рекомендация: преобразовать этот столбец в VARCHAR (MAX), и с вами все будет хорошо!
ALTER TABLE dbo.HTML_CONTENTS
ALTER COLUMN CONTEXT_TEXT VARCHAR(MAX)
Это должно сделать это.
Когда ваш столбец равен VARCHAR(MAX)
, ваши хранимые процедуры становятся совершенно простыми:
ALTER PROC [dbo].[SearchAndReplace]
(@FindString VARCHAR(100),
@ReplaceString VARCHAR(100) )
AS
BEGIN
UPDATE dbo.HTML_CONTENTS
SET CONTENT_TEXT = REPLACE(CONTEXT_TEXT, @FindString, @ReplaceString)
END
Два замечания на стороне:
было бы полезно иметь в вашем хранимом процессе предложение WHERE
, чтобы не обновлять всю таблицу (если только это не то, что вам действительно нужно делать)
вы используете TEXT
в своей таблице, но параметры хранимой процедуры имеют тип NVARCHAR
- попробуйте придерживаться one set - либо TEXT/VARCHAR(MAX)
и обычного VARCHAR(100)
параметров, или затем используйте все строки Unicode: NTEXT/NVARCHAR(MAX)
и NVARCHAR(100)
. Постоянное смешивание строк, не относящихся к Unicode и Unicode, приводит к беспорядку и вызывает много преобразований и ненужных накладных расходов