在列数据类型TEXT SQL Server上使用REPLACE

时间:2015-01-15 23:51:53

标签: sql-server tsql sql-server-2008-r2

我尝试使用此代码来解析列类型文本的急性重音:

UPDATE [AcuerdateWEB].[dbo].[Actividad]
SET Descripcion = REPLACE(CAST(Descripcion AS nvarchar(max)), 'ó', '&oacute')
WHERE Descripcion like '%&oacute%'

问题是列的数据类型为text且无法替换;但当我使用上面的代码时,表明查询成功并显示受影响的行总数

1 个答案:

答案 0 :(得分:2)

是TEXT还是NTEXT?您正在REPLACE中混合类型。

它完成没有错误但没有做任何事情的原因是你要求它用ó替换任何&oacute,并且只在具有&oacute的记录中。

目前的编写方式,你想用另一个替换哪一个是模棱两可的,所以我会同时展示它们。

如果您想将ó替换为&oacute

UPDATE [AcuerdateWEB].[dbo].[Actividad]
SET Descripcion = REPLACE(CAST(Descripcion AS VARCHAR(MAX)), 'ó', '&oacute')
WHERE Descripcion like '%ó%';

如果您想将&oacute替换为ó

UPDATE [AcuerdateWEB].[dbo].[Actividad]
SET Descripcion = REPLACE(CAST(Descripcion AS VARCHAR(MAX)), '&oacute', 'ó')
WHERE Descripcion like '%&oacute%';

此外,如果数据类型确实是NTEXT,只需将VARCHAR(MAX)更改为NVARCHAR(MAX),并将3个字符串文字加上N作为前缀,如下所示:

UPDATE [AcuerdateWEB].[dbo].[Actividad]
SET Descripcion = REPLACE(CAST(Descripcion AS NVARCHAR(MAX)), N'ó', N'&oacute')
WHERE Descripcion like N'%ó%';