【发布时间】:2011-07-11 20:53:05
【问题描述】:
我有一个表,我需要在其中替换列中的一些值。
数据库在 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
任何意见表示赞赏。
【问题讨论】:
-
为什么
nvarchar(max)会在 4000 个字符处截断?这对你有什么回报?SELECT LEN(REPLACE(REPLICATE(CAST('A' AS NVARCHAR(MAX)),16000),'A','B'))您确定您的问题不仅仅是在 SSMS 结果中被截断了吗? -
因为
nvarchar的最大值是4000:msdn.microsoft.com/en-us/library/ms186939.aspx。你给我的查询返回值 16000,但我怎样才能让它遍历一个列来测试值呢?用柱子替换演员表中的“A”并没有解决问题.. -
@MadsMadsDk - 否
4000是最大显式值。使用max最多可以容纳 2GB 的数据(十亿个双字节字符) -
@madsmadsdk:NVARCHAR(MAX) 的最大值是 2 GByte 的数据量 - 大约是 Tolstoj 的
War and Peace量的 250 倍 - 对你来说足够了!?!?? ! -
@marc_s:只是勉强够了 :)
标签: sql sql-server-2005 string replace