SQL字符串替换基于WHERE子句

时间:2017-02-20 16:28:21

标签: sql sql-server sql-server-2014

我有一个备忘录字段,其中可能包含&和HTML等价物&amp ;.我需要编写一个脚本来确保&符号的所有实例都是HTML等价物。有下面的脚本,但WHERE子句似乎并不考虑&的个别实例(字符串)。在备忘录领域,只是整个领域...有关如何实现这一点的任何想法?感谢。

 UPDATE 
    STOCKMEM
 SET 
    INETFDESC = CAST(REPLACE(CAST(INETFDESC as NVarchar(MAX)),'&','&') AS NText)
 WHERE 
    INETFDESC LIKE '%&%' 
    AND INETFDESC NOT LIKE '%&%'

2 个答案:

答案 0 :(得分:5)

请改为尝试:

 UPDATE STOCKMEM
 SET INETFDESC = CAST(
                      REPLACE(
                              REPLACE(
                                      CAST(INETFDESC as NVarchar(MAX))
                              ,'&','&')
                      , '&', ,'&')AS NText)
 WHERE INETFDESC LIKE '%&[^amp;]%' 

第一次替换会将&更改为&,第二次替换会将所有&替换回&

BTW,请注意NText数据类型为depricated,您应将其转换为nvarchar(max)。 来自MSDN:

  未来的SQL版本中将删除

重要! ntext 文字图片数据类型服务器。避免在新的开发工作中使用这些数据类型,并计划修改当前使用它们的应用程序。请改用 nvarchar(max) varchar(max) varbinary(max)

答案 1 :(得分:2)

你可以通过这个来完成同样的事情:

 UPDATE STOCKMEM
 SET INETFDESC = CONVERT(NVARCHAR(MAX),(REPLACE(REPLACE(INETFDESC, '&', '&'), '&', '&')))
WHERE INETFDESC LIKE '%&%'