t-sql替换文本字段

Pet*_*teT 29 sql-server sql-server-2000

我遇到了一个经典的问题,需要在sql 2000数据库的文本字段上进行字符串替换.这可能是整个列的更新或单个字段我不挑剔.

我已经找到了一些如何使用updatetext来实现它的例子,但它们往往是在存储过程中,有没有人知道包含在函数中的类似事情,所以我可以使用它,就像我通常使用Replace()一样.对于不知道的人来说,Replace()函数的问题在于它不支持文本字段.

编辑:我意识到我可能会使用varchar(8000),因此已将字段交换为此类型以解决问题.我从未找到真正的解决方案.

sur*_*ran 48

以下是使用REPLACE函数更新表和文本列的示例查询.希望这对你有用.

UPDATE <Table> set textcolumn=
REPLACE(SUBSTRING(textcolumn,1,DATALENGTH(textcolumn)),'findtext','replacetext') 
WHERE <Condition>
Run Code Online (Sandbox Code Playgroud)

  • 警告:substring返回varchar并将截断为8000个字符(对于ntext为4000),就像其他字符串函数一样.使用SELECT DATALENGTH(textcolumn)验证,DATALENGTH(substring(textcolumn,1,DATALENGTH(textcolumn))) (11认同)
  • @suryakiran这真的帮助我通过删除不良字符来快速更改某些名称.谢谢 (3认同)

kri*_*tof 4

恐怕你不能在函数内做到这一点

当您尝试声明如下函数时:

create function dbo.textReplace(
@inText as text)
returns text
as 
begin
    return 'a' -- just dummy code
end
Run Code Online (Sandbox Code Playgroud)

您将收到以下错误:

The text data type is invalid for return values.
Run Code Online (Sandbox Code Playgroud)

换句话说,您无法为文本数据类型编写简单的 REPLACE 函数

  • 对于 SQL 2005 并且数据长度小于 2GB,这里有一个对我有用的解决方案 =&gt; http://stackoverflow.com/a/2641280/743 (2认同)