[英]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.