SQL UPDATE语句仅更新100字符而非153字符的问题求助
UPDATE写入varchar(500)列仅保留前100字符的排查与解决
问题描述
执行SQL UPDATE语句更新定义为varchar(500)的列时,待更新字符串长度为153字符,但执行后仅成功写入前100字符。
演示脚本:
SET @parameter_additional_info = '{optionsUrl:"/api/customparameter/reports/getReportFactoryHeaderTemplate" ,displayProperty : "displayName", valueProperty:"reportFactoryHeaderFooter" }' IF (SELECT COUNT(*) FROM [dbo].[t024_report_parameters] WHERE report_id = @report_id AND client_id = @client_id AND report_name = @reportname AND param_id = @header_options_param_id) > 0 BEGIN UPDATE [dbo].[t024_report_parameters] SET parameter_additional_info = @parameter_additional_info WHERE report_id = @report_id AND client_id = @client_id AND report_name = @reportname AND param_id = @header_options_param_id END
更新后数据库实际存储内容:
{ optionsUrl:"/api/customparameter/reports/getReportFactoryHeaderTemplate" ,displayProperty : "displa
已确认数据库列长度足够,修改表结构后问题仍未解决。
排查与解决方法
显式定义变量长度:如果
@parameter_additional_info变量未指定长度,SQL Server默认会按varchar(100)处理,导致赋值时截断字符串。需显式声明变量长度:DECLARE @parameter_additional_info VARCHAR(500) = '{optionsUrl:"/api/customparameter/reports/getReportFactoryHeaderTemplate" ,displayProperty : "displayName", valueProperty:"reportFactoryHeaderFooter" }'验证变量实际长度:用
LEN()和DATALENGTH()函数确认变量存储的完整长度,排查是否赋值环节就已截断:SELECT LEN(@parameter_additional_info) AS 字符长度, DATALENGTH(@parameter_additional_info) AS 字节长度检查工具显示限制:部分数据库管理工具(如SSMS)默认会截断长字符串显示。可切换为「结果到文本」模式查询,或修改工具设置(SSMS路径:工具→选项→查询结果→SQL Server→结果到网格→调整「最大字符数」)。
排查触发器与约束:检查表上是否存在UPDATE触发器,是否在触发器中对该字段做了截断处理;同时确认表中无隐含规则约束限制字段长度。
内容的提问来源于stack exchange,提问作者Mayur Kendre
相关产品推荐
相关产品推荐

