在这个实时SQL Server 2008(build 10.0.1600)数据库中,有一个Events表,其中包含一个text名为的列Details.(是的,我意识到这实际上应该是一个varchar(MAX)专栏,但无论是谁设置这个数据库都没有这样做.)
此列包含非常大的异常日志和我尝试通过SQL Server Management Studio访问的关联JSON数据,但每当我将结果从网格复制到文本编辑器时,它会以43679个字符截断它.
我已经阅读了Internet上的各种位置,您可以将XML数据检索的最大字符数设置Tools > Options > Query Results > SQL Server > Results To Grid为无限制,然后执行如下查询:
select Convert(xml, Details) from Events
where EventID = 13920
Run Code Online (Sandbox Code Playgroud)
(请注意,数据列根本不是XML.CONVERT将列添加到XML只是我从谷歌搜索中找到的一种解决方法,其他人习惯于绕过SSMS从一个text或一varchar(MAX)列中检索数据的限制.)
但是,在设置上面的选项,运行查询,然后单击结果中的链接后,我仍然会收到以下错误:
无法显示XML.发生以下错误:发生了意外的文件结束.第5行,位置220160.
一种解决方案是增加从服务器检索的用于XML数据的字符数.要更改此设置,请在"工具"菜单上单击"选项".
那么,关于如何访问这些数据的任何想法?将列转换为varchar(MAX)修复我的困境?
我使用 SQL Server 数据库来存储很长的 Unicode 字符串。该字段来自类型“ntext”,理论上应限制为 2^30 个 Unicode 字符。
从MSDN 文档:
正文
可变长度 Unicode 数据,最大字符串长度为 2^30 - 1 (1,073,741,823) 字节。存储大小(以字节为单位)是输入的字符串长度的两倍。ntext 的 ISO 同义词是国家文本。
我做了这个测试:
生成 50,000 个字符的字符串。
运行更新 SQL 语句
UPDATE [table] SET Response='... 50,000 个字符串...' WHERE ID='593BCBC0-EC1E-4850-93B0-3A9A9EB83123'
检查结果 - 最后实际存储在字段中的内容。
结果是字段 [Response]仅包含43,679 个字符。字符串末尾的所有字符都被丢弃了。
为什么会发生这种情况?我该如何解决这个问题?
如果这真的是这种数据类型(ntext)的容量限制,还有哪一种数据类型可以存储更长的Unicode字符串?