代码之家  ›  专栏  ›  技术社区  ›  Chenna

从JSON加载数据时如何按ORDER和INSERT到表

  •  0
  • Chenna  · 技术社区  · 7 年前

    我需要帮助将数据从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
    
    2 回复  |  直到 7 年前
        1
  •  2
  •   Serkan Arslan    7 年前

    select

    SELECT * FROM @V_CALLSTBL ORDER BY CreatedDate ASC;
    

    您可以在表中添加一个identity列来查看这个。

    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;
    
        2
  •  1
  •   Eralper    7 年前

    如果在SELECT语句中没有指定ORDER BY子句,则不能保证返回的数据集将处于排序状态。

    此外,要使特定的表数据保持有序,应该在该表列上指定一个集群索引。当对筛选条件中的列进行搜索时,这将用于更快地获取数据。