我需要帮助将数据从JSON加载到表中,但是将它们排序/排序并插入到表中?
DECLARE @IN_DATESJSON NVARCHAR(MAX) = N'[{"CreatedDate":"2018-10-10T09:07:29Z"},{"CreatedDate":"2018-10-09T09:07:29Z"},{"CreatedDate":"2018-10-08T07:07:08Z"}]';
DECLARE @V_CALLSTBL AS TABLE (CreatedDate DATETIME);
IF (ISJSON(@IN_DATESJSON) = 1)
BEGIN
INSERT INTO @V_CALLSTBL
SELECT *
FROM OPENJSON (@IN_DATESJSON)
WITH (CreatedDate DATETIME2)
-- ORDER BY CreatedDate ASC -- THIS DOESN'T WORK*
END
SELECT * FROM @V_CALLSTBL;
CreatedDate
-----------------------
2018-10-10 09:07:29.000
2018-10-09 09:07:29.000
2018-10-08 07:07:08.000
答案 0 :(得分:2)
实际上,它会插入ordered,但您也应该选择order by。因为select
不能保证返回已插入的排序数据。
SELECT * FROM @V_CALLSTBL ORDER BY CreatedDate ASC;
,您可以在表中添加一个身份列以查看此情况。
DECLARE @IN_DATESJSON NVARCHAR(MAX) = N'[{"CreatedDate":"2018-10-10T09:07:29Z"},{"CreatedDate":"2018-10-09T09:07:29Z"},{"CreatedDate":"2018-10-08T07:07:08Z"}]';
DECLARE @V_CALLSTBL AS TABLE (ID INT IDENTITY(1,1), CreatedDate DATETIME);
IF (ISJSON(@IN_DATESJSON) = 1)
BEGIN
INSERT INTO @V_CALLSTBL
SELECT *
FROM OPENJSON (@IN_DATESJSON)
WITH (CreatedDate DATETIME2)
ORDER BY CreatedDate ASC -- THIS DOESN'T WORK*
END
SELECT * FROM @V_CALLSTBL ORDER BY CreatedDate ASC;
答案 1 :(得分:1)
如果未在SELECT语句中指定ORDER BY子句,则不能保证返回的数据集将被排序。
此外,要保持特定的表数据有序,您应该在该表列上指定集群索引。当在过滤条件中对该列进行搜索时,这将用于更快地获取数据。
同样,如果您不使用ORDER BY子句,则无法保证排序