2017-02-20 41 views
1

我有一个备注字段,其中可能包含&和HTML等效&。我需要编写一个脚本来确保&符号的所有实例都是HTML的等价物。有下面的脚本,但WHERE子句似乎并没有考虑备忘录字段中的单个实例(字符串)&,只是整个字段...有关如何完成此任务的任何想法?谢谢。SQL字符串替换基于WHERE子句

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

你是什么意思*“的'WHERE'条款似乎并不因子'&'的单个实例” *?你能显示一些样本数据吗? – Siyual

+0

因为有成千上万的行,这是一个备忘录字段,查找只有需要更新的字符串的where处理...所以只有&通过“amp;”继续的实例 - 这有帮助吗? – Justin

回答

5

试试这个:

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

。第一替代将改变&&,第二个将取代所有&回到&

顺便说一句,请注意,NText的资料类型是depricated,您应转换为nvarchar(max)。 来自MSDN:

重要!文字,文字图片数据类型将在未来版本的SQL Server中删除。避免在新的开发工作中使用这些数据类型,并计划修改当前正在使用它们的应用程序。使用nvarchar(max),varchar(max)varbinary(max)代替。

+0

完美,谢谢Zohar!使用WHERE LIKE处理&的所有实例,而不仅仅是那些需要更新的实例,是否可以通过调整来获得任何效率?这个备注字段有数十万行。谢谢。 – Justin

+0

是的,哪里可以改进。稍后再编辑。 –

+0

谢谢Zohar,期待您的反馈。 – Justin

2

可以完成这个同样的事情:

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