最近我玩了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)
列時,我會將所有內容都放在一個塊中。
感謝解釋