MSSQL报错:参数数据类型 text 对于 replace 函数的参数 1 无效的解决办法_MsSql

但是我们可以换一种方法解决这个问题。下面就来分析下解决办法。

对text或ntext类型的数据在查询中不能进行字符串操作。这时用得最多的是把text当作varchar(实际内容长度低于8000字节时)或把ntext当作nvarchar(实际内容长度低于4000字节时)来处理。但是这样处理也不是非常妥当毕竟如果text字段内容超过8000了岂不是要被截断或者忽略掉。
最终找到了一种方法解决了”参数数据类型 text 对于 replace 函数的参数 1 无效”的问题。下面用一个例子来说明怎么处理的。
语法如下:

复制代码 代码如下:

update table set column=replace(cast(column as varchar(max)),'123′,'abc')

解释:
其中的table 代表表名,column代码该表中需要替换的列。改语句的作用是把table表中column列中所有出现123的都给替换为abc。
附:max类型的介绍
Microsoft SQL Server 2005 中引入了 max 说明符。此说明符增强了 varchar、nvarchar 和 varbinary 数据类型的存储能力。varchar(max)、nvarchar(max) 和 varbinary(max) 统称为大值数据类型。您可以使用大值数据类型来存储最大为 2^31-1 个字节的数据。
注意:
当 sp_tableoption 存储过程的 ‘large value types out of row' 选项设置为 OFF 时,大值类型的行内存储限制为 8000 个字节。当此选项设置为 ON 时,只在行内存储 16 字节的根。有关详细信息,请参阅 sp_tableoption (Transact-SQL)。
大值数据类型在行为上和与之对应的较小的数据类型 varchar、nvarchar 和 varbinary 相似。这种相似使 SQL Server 能够更高效地存储和检索大型字符、Unicode 和二进制数据。
有了大值数据类型,使用 SQL Server 的方式是使用早期版本的 SQL Server 中的 text、ntext 和 image 数据类型所不可能具有的。例如,在 SQL Server 2005 中,您可以定义能存储大量数据(最多可达 2^31 字节的字符、整数和 Unicode 数据)的变量。有关详细信息,请参阅 Transact-SQL 变量。
下表说明了大值数据类型和 SQL Server 早期版本中与之对应的数据类型之间的关系。

大值数据类型 早期版本中的 LOB
varchar(max) text*
nvarchar(max) ntext*
varbinary(max)
image

* SQL Server  6.5 版本的客户端不支持 ntext 数据类型,因此无法识别 nvarchar(max)。

重要提示:
请使用 varchar(max)、nvarchar(max) 和 varbinary(max) 数据类型,而不要使用 text、ntext 和 image 数据类型。
大值数据类型在行为上和与之对应的较小的数据类型 varchar(n)、nvarchar(n) 和 varbinary(n) 相同。下面介绍大值数据类型在某些特定情形下的使用:
游标由于可以定义大值数据类型变量,便可以将 FETCH 返回的大值数据类型列中的数据赋给本地变量。有关详细信息,请参阅 FETCH (Transact-SQL)。 使用大值数据类型不影响游标的强制实施游标类型转换用法。
成块更新 UPDATE 语句现在支持 .WRITE( ) 子句对基础大值数据列进行部分更新。这类似于 SQL Server 早期版本中所支持的对text、ntext、image 数据类型的文本指针操作、WRITETEXT 和 UPDATETEX。有关详细信息,请参阅 UPDATE (Transact-SQL)。触发器 支持对插入的和删除的表中的大值数据类型列引用上使用 AFTER 触发器。有关详细信息,请参阅 CREATE TRIGGER (Transact-SQL)。
字符串函数 内置的可操作字符和二进制数据的字符串函数有所增强,可支持大值数据类型的参数。这些函数包括:

复制代码 代码如下:

COL_LENGTH
CHARINDEX
PATINDEX
LEN
DATALENGTH
SUBSTRING

时间: 2024-08-29 15:33:13

MSSQL报错:参数数据类型 text 对于 replace 函数的参数 1 无效的解决办法_MsSql的相关文章

spring分布式事物-atomikos mssql报错Error in recovery以及找不到存储过程

问题描述 atomikos mssql报错Error in recovery以及找不到存储过程 如题,我使用atomikos做spring分布式事物,同时支持Oracle.MySQL和MSSQL三种数据源.目前Oracle和MySQL都能调通,在测试MSSQL的过程中,一直报错. 错误如下: 2015-06-03 14:08:45,911 WARN com.atomikos.datasource.xa.XATransactionalResource.logWarning:24 - Error i

oracle10错误-用plsql编辑表结构的时候报错:ORA-25150:不允许对区参数执行ALTERING

问题描述 用plsql编辑表结构的时候报错:ORA-25150:不允许对区参数执行ALTERING plsql添加字段的是报错 但只直接用语句可以添加 alter table tmpzjj add name1 varchar2(255) 这样是OK的

[Android]打开eclipse报错:发现了以元素 'd:skin' 开头的无效内容。此处不应含有子元素。

[错误]  打开eclipse报错:发现了以元素 'd:skin' 开头的无效内容.此处不应含有子元素. [具体报错信息]  Error parsing D:\android-sdks\system-images\android-22\android-wear\armeabi-v7a\devices.xml cvc-complex-type.2.4.d: 发现了以元素 'd:skin' 开头的无效内容.此处不应含有子元素. Error: Error parsing D:\android-sdks

Ajax提交参数的值中带有html标签不能提交成功的解决办法(ASP.NET)

最近在公司做资源及文章上传功能遇到一个小问题,被坑了好半天. 该功能就类似利用富文本编辑器发布信息,但是用Ajax提交数据,因此提交参数值中不可避免的含有html标签. 在本地运行代码一直没问题,总是可以提交成功,但是代码部署到线上就不能成功提交数据了,被坑了好久,找了好半天才找到问题所在. 提交不成功的原因是因为我的提交数据中含有html标签,然后直接无法请求到我的目标地址. 然后解决办法如下: 1.在页面用JS的Base64编码(类似加密)带有html标签的参数值. 2.在目标地址获取到数据

SQL中函数 replace 的参数1的数据类型ntext无效的解决方法_MsSql

今天将一个ACC的数据库转换成ms-sql以后发现在使用replace替换语句的时候出现: SQL中函数 replace 的参数 1 的数据类型 ntext 无效.找了半天找到了解决办法: 因为ntext需要转化下 用如下语句即可解决: 复制代码 代码如下: UPDATE 表 SET 字段=REPLACE(cast(字段 AS varchar(8000)),'被替换的内容','将要替换成的内容') varchar(8000)是字段类型.8000是个很猛的字段,可以根据自己的实际情况改动!

【springMVC 后台跳转前台】1.使用ajax访问的后台,后台正常执行,返回数据,但是不能进入前台的ajax回调函数中 ----2.前后台都没有报错,不能进入ajax回调函数

问题1: 使用ajax访问的后台,后台正常执行,并且正常返回数据,但是不能进入前台的ajax回调函数中 问题展示:    问题解决: 最后发现是因为后台的方法并未加注解:@ResponseBody,导致方法不认识最后返回的是给ajax的data,而是以为要去找这个页面所以并未找到!! 1 @RequestMapping("/queryAllDisease") 2 @ResponseBody 3 public PageInfo<Disease> queryAllDisease

通过应用商店升级Win8.1出现报错:“你的Windows 8.1安装无法完成”,如何解决?

通过应用商店升级Win8.1,更新一段时间后,出现报错"你的Windows 8.1安装无法完成",没有任何报错代码.点击"再试一次"无法继续更新,必须回到应用商店中,重新点击下载更新才可以 原因分析: <>出现这个问题一般是下载或启动安装时出现了错误. 解决方案: 首先确认下载应用商店中的应用和Windows 自动更新功能正常. 1. 按键盘上的windows键+X,在弹出菜单上点击"命令提示符(管理员)"; 2. 在命令提示符窗口中

MyBatis MapperProvider MessageFormat拼接批量SQL语句执行报错的原因分析及解决办法_MsSql

最近在项目中有这么一段代码:下载服务器基础业务数据进行本地批量插入操作,因项目中使用mybatis进行持久化操作,故直接考虑使用mybatis的批量插入功能. 1.以下是Mapper接口的部分代码 public interface PrintMapper { @InsertProvider(type = PrintMapperProvider.class,method = "insertAllLotWithVehicleCode4H2") void insertAllLotWithVe

Oracle修改时间报:ORA-01830: 日期格式图片在转换整个输入字符串之前结束的解决办法

(去掉时分秒的方法,只保留年月日) 解决方法: 1:如果Model实体类是DateTime类型,那么strSql.Append("to_date('" + model.JHKSRQ.ToString("yyyy-MM-dd") + "','YYYY-MM-DD'),"); 注意:如果Model实体类是DateTime?类型,那么要改为:DateTime,否则会报错! 2:如果Model实体类是String类型,那么strSql.Append(&q