Uri*_*iil 8 c# sql t-sql sql-server azure-sql-database
问题是,如果SQL返回超过2033个字符的JSON,它会被截断,但如果我在SQL端将其转换为NVARCHAR(max),结果将不会被截断,一切都会好的.
有趣的是,在SSMS中我有类似的行为,当我复制JSON返回为字符串时,它复制整个对象,但是如果我复制JSON的值作为JSON返回它会在N个字符后被截断.但是如果我点击JSON作为JSON结果它将打开完整对象.
有什么想法来解释这种行为?
代码,读取数据(虽然我在这里使用dapper,结果与SqlCommand和ExecuteScalar/Reader相同):
using (var connection = new SqlConnection(_connectionString))
{
var response = await connection.ExecuteScalarAsync<string>($"[Portal].[GetData]", commandType: CommandType.StoredProcedure);
return response == null ? null : JObject.Parse(response);
}
Run Code Online (Sandbox Code Playgroud)
过程,返回.NET可以正确解析的结果:
CREATE PROCEDURE [Portal].[GetData]
AS
BEGIN
SET NOCOUNT ON;
DECLARE @result NVARCHAR(max);
SET @result = (SELECT TOP (120)
[DateTime]
,[Open]
,[Closed]
,[Total]
FROM [Common].[Table]
FOR JSON PATH, ROOT('Root'))
SELECT @result;
END
Run Code Online (Sandbox Code Playgroud)
SSMS中的结果视图(结果不可点击,但可以复制而不截断):
过程,返回截断的结果(结果不可点击):
CREATE PROCEDURE [Portal].[GetData]
AS
BEGIN
SET NOCOUNT ON;
SELECT TOP (120)
[DateTime]
,[Open]
,[Closed]
,[Total]
FROM [Common].[Table]
FOR JSON PATH, ROOT('Root')
END
Run Code Online (Sandbox Code Playgroud)
SSMS中的结果视图:
| 归档时间: |
|
| 查看次数: |
3107 次 |
| 最近记录: |