最近我玩了Azure SQL数据库的新功能for json auto
。SqlDataReader和SQL Server 2016 FOR JSON以2k字节的块分割json
当我选择,例如大量的记录与此查询:
Select
Wiki.WikiId
, Wiki.WikiText
, Wiki.Title
, Wiki.CreatedOn
, Tags.TagId
, Tags.TagText
, Tags.CreatedOn
From
Wiki
Left Join
(WikiTag
Inner Join
Tag as Tags on WikiTag.TagId = Tags.TagId) on Wiki.WikiId = WikiTag.WikiId
For Json Auto
,然后做一个选择用C#SqlDataReader
:
var connectionString = ""; // connection string
var sql = ""; // query from above
var chunks = new List<string>();
using (var connection = new SqlConnection(connectionString))
using (var command = connection.CreateCommand()) {
command.CommandText = sql;
connection.Open();
var reader = command.ExecuteReader();
while (reader.Read()) {
chunks.Add(reader.GetString(0)); // Reads in chunks of ~2K Bytes
}
}
var json = string.Concat(chunks);
我得到了很多的数据块。
为什么我们有这个限制?为什么我们不能把所有东西都放在一个大块里?
当我阅读nvarchar(max)
列时,我会将所有内容都放在一个块中。
感谢解释