我正在尝试使用解析为文本的巨大 JSON 手动更新类型为
nvarchar(max)
的 SQL Server 列。
这是一个简单直接的查询:
UPDATE Books
SET Story = ''
WHERE Id = 23
当我尝试插入
Story
的 JSON 包含一个巨大的值(JSON 的一部分)时,就会出现问题(我认为断点约为 38k 个字符)
"Text": "testtesttesttest..." (imagine the value is 50k characters)
通常 SQL Server Management Studio 中单引号中的文本值是红色的,这并不是因为值太大。如果我将文本分成多个新行,那么它会被接受为“有效”字符串,但 JSON 验证失败 -
JSON 文本格式不正确。意外的字符' ' 在位置 33043 处找到。
我也尝试使用 + CHAR(13) +' 分割大行,但没有成功。
有没有办法在维护整个 JSON 的同时更新值?
超过 32,768 个字符 (
POWER(2,15)
) 的行会破坏该行和所有后续行的智能感知。
您可以忽略它,因为它仍然可以正常执行。
或者,您可以拆开行并连接字符串。这不会在字符串中嵌入换行符。
确保您连接的所有元素都有
N
前缀,并且第一个元素键入为 MAX
UPDATE Books
SET Story = CAST(N'YourLongString' AS NVARCHAR(MAX)) +
N'YourLongStringContinued'
WHERE Id = 23
或者您可以使用 反斜杠字符 将字符串继续到新行,而不插入换行符,但您需要抵制在此处缩进字符串的冲动,以避免在字符串内容本身中插入不需要的空格。
UPDATE Books
SET Story =
N'YourLongString\
YourLongStringContinued'
WHERE Id = 23
如果您很高兴接受智能感知将在长行中被破坏,但只是想避免它在后续行中被破坏,您甚至可以为此声明一个变量并在文件的最后一行中分配长字符串。并使用
GOTO
来分配变量并跳回文件中的原始位置。