使用SQL Server替换函数替换字符串 - 字符串超过4000个字符 - 怎么办?

时间:2011-03-09 12:23:53

标签: sql sql-server-2005 string replace

我有一个表,我需要在列中替换一些值。

数据库正在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 个答案:

答案 0 :(得分:5)

我怀疑您刚刚达到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]

答案 1 :(得分:3)

这演示了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