将json分配给变量时,SQL Server中的数据被截断
我想使用T-SQL生成JSON并将其存储在变量中。当我将JSON分配给NVARCHARMAX时,数据会被截断,但如果我直接使用select语句,数据不会被截断将json分配给变量时,SQL Server中的数据被截断,sql,sql-server,tsql,sql-server-2016,Sql,Sql Server,Tsql,Sql Server 2016,我想使用T-SQL生成JSON并将其存储在变量中。当我将JSON分配给NVARCHARMAX时,数据会被截断,但如果我直接使用select语句,数据不会被截断 DECLARE @DateOne DATETIME, @DateTwo DATETIME,@DrillThroughData NVARCHAR(MAX) SELECT @DateOne = '2016-01-01',@DateTwo = '2017-07-31' CREATE TABLE #DrillThroughData ( [D
DECLARE @DateOne DATETIME, @DateTwo DATETIME,@DrillThroughData NVARCHAR(MAX)
SELECT @DateOne = '2016-01-01',@DateTwo = '2017-07-31'
CREATE TABLE #DrillThroughData
(
[Date] DATE
,TotalAmountIncome DECIMAL(18,4)
,TotalAmountRefunded DECIMAL(18,4)
,ProductCostIncome DECIMAL(18,4)
,ProductCostRefunded DECIMAL(18,4)
)
INSERT INTO #DrillThroughData
VALUES('2017-07-13',839.2000,-241.4000,0.0000,0.0000)
;WITH CTE AS
(
SELECT 1 SNo,CAST(CONVERT(NVARCHAR(6),@DateOne,112)+'01' AS DATE) AS StartDate
UNION ALL
SELECT SNo+1 SNo,DATEADD(DAY,1,StartDate ) StartDate
FROM CTE WHERE DATEADD(Day,1,StartDate ) <= @DateTwo
)
SELECT StartDate [Date],SNo
INTO #AllDays
FROM CTE
OPTION(MAXRECURSION 0)
-- Data not truncated here.
SELECT ad.[Date]
,FORMAT(ad.[Date],'yyyy-MMM') [Month]
,ISNULL(d.TotalAmountIncome,0) TotalAmountIncome
,ISNULL(d.TotalAmountRefunded,0) TotalAmountRefunded
,ISNULL(d.ProductCostIncome,0) ProductCostIncome
,ISNULL(d.ProductCostRefunded,0) ProductCostRefunded
FROM #DrillThroughData d
RIGHT JOIN #AllDays ad
ON d.[Date] = ad.Date
ORDER BY SNo
FOR JSON AUTO
SET @DrillThroughData = (SELECT ad.[Date]
,FORMAT(ad.[Date],'yyyy-MMM') [Month]
,ISNULL(d.TotalAmountIncome,0) TotalAmountIncome
,ISNULL(d.TotalAmountRefunded,0) TotalAmountRefunded
,ISNULL(d.ProductCostIncome,0) ProductCostIncome
,ISNULL(d.ProductCostRefunded,0) ProductCostRefunded
FROM #DrillThroughData d
RIGHT JOIN #AllDays ad
ON d.[Date] = ad.Date
ORDER BY SNo
FOR JSON AUTO)
-- Data is being Truncated even though the varaible is nvarchar(max)
SELECT @DrillThroughData
未被截断时json的实际长度为88441,但被截断为13680
提前感谢。这似乎是ssms的一个限制。检查此项答案:可能的重复项您可以随时检查内容的长度(以字节为单位):选择datalength@DrillThroughData;感谢@TheGameiswar,这是SSMS的一个限制,我将在应用程序中获取完整数据。可能重复