【问题标题】:UPDATE error: "Argument data type text is invalid for argument 1 of REPLACE"更新错误:“参数数据类型文本对于 REPLACE 的参数 1 无效”
【发布时间】:2017-06-19 22:48:37
【问题描述】:

为什么我的查询会出现这个错误?

消息 8116,第 16 级,状态 1,第 3 行
参数数据类型文本对于替换函数的参数 1 无效。

查询:

UPDATE 
    tableName
SET
    fieldName = REPLACE (fieldName, '&lt;', '<')
WHERE
    id = 100

【问题讨论】:

  • ntexttextimage 数据类型将在 SQL Server 的未来版本中删除。避免在新的开发工作中使用这些数据类型,并计划修改当前使用它们的应用程序。请改用nvarchar(max)varchar(max)varbinary(max)See details hereTEXT 是一个非常糟糕的数据类型 - 你不能对它做很多事情(你不能使用所有的字符串函数) - 停止使用它 - 现在!

标签: sql-server


【解决方案1】:

试试这个:

UPDATE tableName
SET fieldName = REPLACE (CONVERT(VARCHAR(MAX), fieldName), '&lt;', '<')
WHERE id = 100

【讨论】:

  • 两个答案都解决了问题,但没有提及原因(请查看 marc 的评论)。此外,错误消息本身也会说明原因。
【解决方案2】:

这对你有用

UPDATE yourTableName
SET 
fieldName = REPLACE (CONVERT(VARCHAR(MAX), fieldName), '&lt;', '<')
WHERE id = 100

【讨论】:

    【解决方案3】:

    如果您想对大于 8000 个字符的文本进行相同的操作,可以使用以下代码:

    DECLARE @v VARCHAR(10) -- TEXT TO ADD
    DECLARE @Vs VARHCAR(10) -- TEXT TO FIND
    SET @v = 'String text to add'
    SET @Vs = 'String text to find'
    
    
           UPDATE 
                    yourTableName
            SET 
                    textField = SUBSTRING(textField,1,DATALENGTH (textField)-LEN(@Vs)) + REPLACE( CAST(SUBSTRING(textField,DATALENGTH(textField)-LEN(@Vs)-1,DATALENGTH (textField)) AS VARCHAR(4)),@Vs,@v )
                WHERE 
                    yourTableName.id = @iRifID -- Update for Table ID
    

    【讨论】:

      猜你喜欢
      • 2017-03-22
      • 2014-05-06
      • 2021-08-07
      • 2019-09-30
      • 2016-07-29
      • 1970-01-01
      • 1970-01-01
      • 2022-11-09
      • 1970-01-01
      相关资源
      最近更新 更多