2010-04-14 64 views
34

我在SQL Server 2005中有一个数据库,它是从SQL Server 2000启动的,并且仍在使用TEXT类型字段而不是varchar(max)。SQL Server查找并替换为TEXT字段

我需要找到并替换文本字段中的一串字符,但所有如何做到这一点的例子,我发现并不像他们会为我工作。看起来UPDATETEXT命令要求明确设置两个参数“insert_offset”和“delete_length”,但是我正在搜索的字符串可能出现在文本中的任何一点,甚至在同一单元格中的几个点上。我对这两个参数的理解是,im搜索的字符串总是处于相同的位置,因此insert_offset是UPDATETEXT命令将开始替换文本的文本中的空格数。

举例:需要找到:&lt;u&gt;并将其替换为:<u>

文本字段示例:

谁能帮我这个?谢谢!

回答

60

我终于明白了。它被埋在jfrobishow发表的文章的评论中。非常感谢。

这里是整个响应,导致我的解决方案:

报价:最初由fredclown

张贴如果使用SQL 2005,您可以使用一个文本类型更换。所有你必须 做的是下面的...

场=替换(CAST(场为varchar(最大)), '串', '替换')

容易馅饼。

两个大拇指向Fredclown !!!命令 对我来说也是一种魅力。这 是我写我的更新语句 查找并在文本字段中 SQL Server 2005数据库

UPDATE TableName SET DBTextField = REPLACE(CAST(DBTextField AS varchar(MAX)) 
               ,'SearchText', 'ReplaceText') 
FROM TableName 
WHERE CHARINDEX('SearchText',CAST(DBTextField as varchar(MAX)))>0 

更换注:即这可能截断的将大小dbfield,但如果是一个长文本列使它nvarchar(最大),你不应该得到任何截断!

+8

警告:这将裁剪文本字段的内容为8000字符 – 2013-01-17 10:45:52

+0

@incubushead谢谢。我知道这是一个旧帖子,但您提供的这种特定语法直接帮助我生活在客户端网站上,其中某些内容会变得冗长而且其他明智的努力工作,所以谢谢。任何人坚持与一个ntext字段 - 我是,不要投到ntext(不工作和已弃用),只需使用varchar(max)在这里给出;它只是工作。演员阵容不会改变列的类型,只是更新的行为 - 如果文本比其他几个字节长一些,你可以截断为50个字符,也不要错过MAX。 – 2013-03-12 13:05:43

+0

如果你想删除字符串而不是用任何东西替换它们会怎么样? – Fandango68 2015-07-14 04:08:03