SQL Server更新nvarchar(max)列时大JSON值写入问题求助
解决SQL Server中超长JSON更新nvarchar(max)列的问题
可行解决方案
1. 变量分段拼接法
声明NVARCHAR(MAX)变量,将超长JSON拆分为多个不破坏JSON语法结构的字符串片段(比如不要在单个字符串或键值对中间断开),通过+拼接成完整内容后执行更新:
DECLARE @fullJson NVARCHAR(MAX); SET @fullJson = N'{"Text": "testtesttest...第一部分内容"}' + N'续接的第二部分内容...testtesttest"' + N'...后续所有分段内容}'; -- 确保拼接后是完整合法的JSON UPDATE Books SET Story = @fullJson WHERE Id = 23;
这种方式避开了SSMS对单引号内超长字符串的识别限制,同时不会引入多余换行符破坏JSON结构。
2. 读取外部JSON文件更新
如果完整JSON已保存为本地文件,可通过OPENROWSET直接读取文件内容赋值给变量,再执行更新:
DECLARE @fullJson NVARCHAR(MAX); SELECT @fullJson = BulkColumn FROM OPENROWSET(BULK 'D:\data\book_story.json', SINGLE_NCLOB) AS JsonSource; UPDATE Books SET Story = @fullJson WHERE Id = 23;
注意:SQL Server服务运行账号需要拥有该文件路径的读取权限,路径需使用绝对路径或UNC网络路径。
3. 直接编辑表单元格
利用SSMS的可视化编辑功能绕开手写SQL的字符串限制:
- 在SSMS中找到
Books表,右键选择编辑前200行(若目标行不在前200,可先筛选出Id=23的行) - 双击
Story列对应的单元格,直接粘贴完整的超长JSON字符串 - 点击工具栏的保存按钮完成更新
这种方式由SSMS自动处理字符串存储逻辑,不会出现语法识别或换行符污染JSON的问题。
为什么之前的方法失败?
- SSMS对直接写在单引号内的字符串有长度限制(约65535字符),超过后无法识别为合法字符串,导致语法高亮异常
- 手动拆分多行时,SSMS会自动在每行末尾插入换行符(
CHAR(10)或CHAR(13)+CHAR(10)),这些未转义的换行符会破坏JSON格式规范,引发验证错误 - 使用
+CHAR(13)+拼接时,若拆分片段本身带换行或拼接逻辑错误,反而会引入多余无效字符,导致JSON验证失败
内容的提问来源于stack exchange,提问作者Filip5991
相关产品推荐
相关产品推荐

