Замена строки с помощью функции SQL Server Replace - строка содержит более 4000 символов - что делать? - PullRequest
2 голосов
/ 09 марта 2011

У меня есть таблица, в которой мне нужно заменить некоторые значения в столбце.

База данных работает на SQL Server 2005.

Проблема состоит в том, что некоторые строки содержат больше4000 символов, что вызывает у функции REPLACE некоторые проблемы, поскольку требует, чтобы я привел первый параметр к типу данных NVARCHAR, и поэтому любые символы, превышающие 4000, усекаются.

Есть лиесть ли обходной путь для этого, кроме написания приложения, которое решает эту проблему?

Вопрос, о котором идет речь:

SELECT 
   Replace(cast([Database].[dbo].[fruits].[Tekst] as NVARCHAR(MAX)), 'bananas', 'apples') 
FROM [Database].[dbo].[fruits]

Столбец fruits имеет тип данных Text

Любой вклад приветствуется.

Ответы [ 2 ]

5 голосов
/ 09 марта 2011

Я подозреваю, что вы только что достигли предела для отдельного значения в SSMS.

Как ни досадно, это не позволяет вам устанавливать это неограниченное значение, и единственный известный мне способ отображения длинного текста - это приведение к XML, как показано ниже.

select
(select Replace(cast([Database].[dbo].[fruits].[Tekst] as NVARCHAR(MAX)),'bananas','apples')  AS [processing-instruction(x)] FOR XML PATH(''), TYPE)
FROM [Database].[dbo].[fruits]
3 голосов
/ 09 марта 2011

Это демонстрирует, как REPLACE может обрабатывать более длинную строку

SELECT CAST(REPLICATE(N'abc', 4000) AS nvarchar(MAX)) +
               REPLICATE(N'def', 4000)  +
               REPLICATE(N'abc', 4000)

SELECT LEN(
       CAST(REPLICATE(N'abc', 4000) AS nvarchar(MAX)) +
               REPLICATE(N'def', 4000)  +
               REPLICATE(N'abc', 4000)
       ) --11997

SELECT REPLACE(CAST(REPLICATE(N'abc', 4000) AS nvarchar(MAX)) +
               REPLICATE(N'def', 4000)  +
               REPLICATE(N'abc', 4000), 'def', 'ddeeff')

SELECT LEN(
       REPLACE(CAST(REPLICATE(N'abc', 4000) AS nvarchar(MAX)) +
               REPLICATE(N'def', 4000)  +
               REPLICATE(N'abc', 4000), 'def', 'ddeeff')
       ) --15996
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...