簡體   English   中英

SQL 服務器/ Azure SQL - 對於 JSON

[英]SQL Server/ Azure SQL - For JSON

我正在編寫一些 SQL 過程,這些過程使用 select 查詢的 for Json 選項將 JSON 返回到我的應用程序。 一些查詢是對數據庫的查找——這些需要將行數返回給應用程序,以便它可以處理分頁。

我想像這樣退回我的 json

{
    "TotalRows": 5122,
    "Requisitions": 
        [{          
            "ID": "4D4FFB67-7EE2-EC11-B656-28187815440C",
            "Ref": "SC000014676",
            "JobTitle": "Bid Management Lead ",
            "ShortlistDueDate": "2022-01-16T00:00:00Z",
            "WrkDaysToShortlistDeadline": -137,
            "NoRequiredForShortlist": 15
        }, {

我正在計算查詢返回到變量@TotalRows 中的總行數。 我試圖將此查詢中的總行移到嵌套中的另一個 select; 但我無法獲得 sql 來編譯 proc; 它抱怨第 1 列丟失。 此示例代碼去除了 where 子句等; 返回結果 - 但在每個元素中報告了總行數。

有沒有辦法在我丟失的單個 select 中做到這一點 - 或者我應該減少損失並將 output 放入變量並使用第二個查詢來填充總行數?

當前響應

{
    "Requisitions": [{
            "TotalRows": 5122,
            "ID": "4D4FFB67-7EE2-EC11-B656-28187815440C",
            "Ref": "SC000014676",
            "JobTitle": "Bid Management Lead ",
            "ShortlistDueDate": "2022-01-16T00:00:00Z",
            "WrkDaysToShortlistDeadline": -137,
            "NoRequiredForShortlist": 15
        },

**當前邏輯示例**

Declare @TotalRows Int


    select 
    @TotalRows = count(*) 

    from 
        dbo.tblRequisitions aa

set dateformat dmy
select

(
select 
    @TotalRows as TotalRows
    
    , ID 
    ,Ref 
    ,JobTitle 
    ,ShortlistDueDate 
    ,WrkDaysToShortlistDeadline 
    ,NoRequiredForShortlist 

    
    
from 
    (
        select 
          aa.RequisitionID  as ID
        , aa.RequisitionRef as Ref
        , aa.RequisitionJobTitle as JobTitle
        , dateadd(dd,14, aa.RequisitonAdded) as ShortlistDueDate
        , datediff(dw, getdate(), dateadd(dd,14, RequisitonAdded)) as WrkDaysToShortlistDeadline
        , aa.RequisitonNoPositionsTotal * 5 as NoRequiredForShortlist


        from 
            dbo.tblRequisitions aa

        order by 
        
            aa.RequisitonAdded

            offset (@Page * @noRows) rows
            fetch next @noRows rows only
    ) requisitions
order by 
    TotalRows, 
    requisitions.id
for 
    json auto 
    , Root ('Requisitions')
    , INCLUDE_NULL_VALUES
) as 
    Requisitions

不要使用ROOT ,而是將整個事情嵌套在子查詢中,並在另一個子查詢中執行SELECT COUNT(*) ,然后對所有這些使用另一個FOR JSON

select
  (
  select 
    count(*) 
  from 
    dbo.tblRequisitions aa
  ) as TotalRows,
    
  (
  select 
    , ID 
    ,Ref 
    ,JobTitle 
    ,ShortlistDueDate 
    ,WrkDaysToShortlistDeadline 
    ,NoRequiredForShortlist 
  from 
    (
        select 
          aa.RequisitionID  as ID
        , aa.RequisitionRef as Ref
        , aa.RequisitionJobTitle as JobTitle
        , dateadd(dd,14, aa.RequisitonAdded) as ShortlistDueDate
        , datediff(dw, getdate(), dateadd(dd,14, RequisitonAdded)) as WrkDaysToShortlistDeadline
        , aa.RequisitonNoPositionsTotal * 5 as NoRequiredForShortlist

        from 
            dbo.tblRequisitions aa

        order by 
            aa.RequisitonAdded
        offset (@Page * @noRows) rows
        fetch next @noRows rows only
    ) requisitions
  order by 
    requisitions.id
  for 
    json auto 
    , INCLUDE_NULL_VALUES
) as 
    Requisitions

FOR JSON PATH, WITHOUT_ARRAY_WRAPPER;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM