我有一个表,我需要在列中替换一些值。
数据库正在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
任何意见都赞赏。
答案 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