基于WHERE子句的SQL字符串替换
我有一个memo字段,其中可能包含&和HTML等价物&。我需要编写一个脚本,以确保所有的ampersand实例都是HTML等效的。使用下面的脚本,但WHERE子句似乎没有考虑备注字段中的单个实例(字符串),而是整个字段。。。关于如何实现这一点有什么想法吗?谢谢基于WHERE子句的SQL字符串替换,sql,sql-server,sql-server-2014,Sql,Sql Server,Sql Server 2014,我有一个memo字段,其中可能包含&和HTML等价物&。我需要编写一个脚本,以确保所有的ampersand实例都是HTML等效的。使用下面的脚本,但WHERE子句似乎没有考虑备注字段中的单个实例(字符串),而是整个字段。。。关于如何实现这一点有什么想法吗?谢谢 UPDATE STOCKMEM SET INETFDESC = CAST(REPLACE(CAST(INETFDESC as NVarchar(MAX)),'&','&') AS NText
UPDATE
STOCKMEM
SET
INETFDESC = CAST(REPLACE(CAST(INETFDESC as NVarchar(MAX)),'&','&') AS NText)
WHERE
INETFDESC LIKE '%&%'
AND INETFDESC NOT LIKE '%&%'
请尝试以下方法:
UPDATE STOCKMEM
SET INETFDESC = CAST(
REPLACE(
REPLACE(
CAST(INETFDESC as NVarchar(MAX))
,'&','&')
, '&', ,'&')AS NText)
WHERE INETFDESC LIKE '%&[^amp;]%'
第一次更换将更改&
到&
,第二个将替换所有&
回到&代码>
顺便说一句,请注意,NText
数据类型为,您应该将其转换为nvarchar(max)
。
从MSDN:
重要ntext、text和image数据类型将在SQL Server的未来版本中删除。避免在新的开发工作中使用这些数据类型,并计划修改当前使用它们的应用程序。改用nvarchar(max)、varchar(max)和varbinary(max)
请尝试以下方法:
UPDATE STOCKMEM
SET INETFDESC = CAST(
REPLACE(
REPLACE(
CAST(INETFDESC as NVarchar(MAX))
,'&','&')
, '&', ,'&')AS NText)
WHERE INETFDESC LIKE '%&[^amp;]%'
第一次更换将更改&
到&
,第二个将替换所有&
回到&代码>
顺便说一句,请注意,NText
数据类型为,您应该将其转换为nvarchar(max)
。
从MSDN:
重要ntext、text和image数据类型将在SQL Server的未来版本中删除。避免在新的开发工作中使用这些数据类型,并计划修改当前使用它们的应用程序。改用nvarchar(max)、varchar(max)和varbinary(max)
您可以通过以下方式完成相同的任务:
UPDATE STOCKMEM
SET INETFDESC = CONVERT(NVARCHAR(MAX),(REPLACE(REPLACE(INETFDESC, '&', '&'), '&', '&')))
WHERE INETFDESC LIKE '%&%'
您可以通过以下方式完成相同的任务:
UPDATE STOCKMEM
SET INETFDESC = CONVERT(NVARCHAR(MAX),(REPLACE(REPLACE(INETFDESC, '&', '&'), '&', '&')))
WHERE INETFDESC LIKE '%&%'
您所说的“WHERE
子句似乎没有考虑到&
的各个实例”是什么意思?您可以显示一些示例数据吗?因为有数十万行,这是一个备注字段,所以您的where进程只包含需要更新的字符串。。。因此,只有以“amp;”开头的实例才有帮助吗?您所说的“where
子句似乎没有考虑到&
的各个实例”是什么意思?您可以显示一些示例数据吗?因为有数十万行,这是一个备注字段,所以您的where进程只包含需要更新的字符串。。。所以,只有通过“amp;”进行处理的情况才有帮助吗?太好了,谢谢Zohar!使用WHERE-LIKE处理所有的&,而不仅仅是那个些需要更新的实例,通过调整它是否可以提高效率?此备注字段有数十万行。谢谢。谢谢Zohar,期待你的反馈。我已经编辑了我的答案。现在where子句不会选择只有&;的列
Zohar,这太完美了——非常感谢您分享您的专业知识。Zohar,大家好,我们再次遇到了一个问题,可能还有其他以“&”(即—“等)开头的特殊HTML字符…所以我们需要确保我们不会将它们转换为&;否则我们最终会将—转换为&;mdash;…也就是说,最长的HTML标记可以以六个字符开头,所以&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&以“;“在&?谢谢一堆。太好了,谢谢你Zohar!使用WHERE LIKE处理所有的&,而不仅仅是那些需要更新的实例,通过调整它可以提高效率吗?此备注字段有数十万行。谢谢。谢谢你Zohar,期待你的反馈。我已经编辑了我的回答。现在where子句不会选择只有&;
Zohar的列,这太完美了——非常感谢您分享您的专业知识。Zohar,您好,我们再次遇到一个问题,可能会有其他以“&”(即—)开头的特殊HTML字符。。。因此,我们需要确保不会将这些转换为&;否则,我们最终会转换为—至&;mdash。。。也就是说,以&开头的最长的HTML标记似乎是六个字符,所以&u_; _; ; ;。。。您对更新where子句有什么想法,这样它就不会更新在&后1-7个字符中以“;”开头的任何&?非常感谢。