0

我的表中有一个名为 [Body] 的 nvarchar(MAX) 字段。我正在尝试将该字段设置为(相当)长的字符串。我发现如果我的字符串 > 42531 字符,更新语句运行,其他字段被更新,但 [Body] 字段设置为空字符串。如果我从字符串中的任何位置删除 1 个字符,[Body] 字段将包含我设置的文本。我添加/删除的字符或其位置对此也没有任何影响,这不是一个奇怪的字符或转义问题。

DECLARE @p1 nvarchar(MAX)
SET @p1 = 'a string longer 
than 42531 chars...
with line breaks etc'
UPDATE [dbo].[MyTable] SET [Body] = @p1, CreatedOn = GETDATE() WHERE Id = 15597

怎么会这样?!很明显,nvarchar(MAX) 最多可以存储 2GB 的数据,但我还没有接近它。

4

1 回答 1

0

呃,这真的很奇怪。也许这是一个 Management Studio 问题 - 正如您在此屏幕截图中看到的那样,在 SSMS 中,某些记录的字段显示为空。但是,我刚刚发现我可以将光标放在“空”字段中,按 CTRL-C 并将值复制到其他地方 - 所以数据实际上就在那里,SSMS 只是没有显示任何数据!即使我将光标放在该字段中,数据也不会在视觉上出现,该字段就像它是空的一样。但是 CTRL-C 获取数据!

也许这对 SSMS 2012 来说是新的——我以前没见过。

我知道 SSMS “每列中显示的最大字符数”设置,该设置设置为 256。但我看不出这会如何影响任何事情,因为其他记录(有数千个字符,但少于42532 个字符)确实显示数据存在,如果我将光标放在这些字段中 SSMS 转到文本字符串的末尾,我可以按 F2 并在整个字符串中移动光标,而不仅仅是 256 个字符。但是,当有 > 42531 个字符时,我在该字段中什么都看不到...

无论如何,至少我现在知道数据在那里!

于 2013-11-06T09:08:29.620 回答