2017-07-01 7 views
0

テーブル、次の点を考慮JSONとしてカウント:戻りデータとはtoghether

[Id: 1, Name: "A1"], [Id: 2, Name: "A2"], ... [Id: 100, Name: "A100"] 

は、私は、ページングで、Idを< = 50のデータを必要としています。その後、私はどのように私はを使用してSQL Server 2016年にそのJSONを作成することができます

{ 
    count:50, 
    values:[{Id:1, Name:'A1'}, ..., {Id:10,Name:'A10'}] 
} 

クライアントに次のようにJSONを返すだから私は

select * 
from data 
where Id <= 50 order by Id 0 rows fetch next 10 rows only 

を書くそして私は別のクエリ

select count(1) 
from data 
where Id <= 50 

を実行します1選択と往復のみのdb?

+0

になります。計算されたフィールドを結果セットに投影するだけです。 –

答えて

0

解決策が見つかりました。

select (select count(1) from data where Id <= 50) as total, 
(select * from data where Id <= 50 order by Id 0 rows fetch next 10 rows only FOR JSON PATH) as values 
FOR JSON PATH, WITHOUT_ARRAY_WRAPPER 

それはあなたがあなたのページ変数のクエリを必要としない

{ 
    count:50, 
    values:[{Id:1, Name:'A1'}, ..., {Id:10,Name:'A10'}] 
} 
+1

制限は標準のSQL Server構文ではありません。間違いはありませんか? –

+0

ええ、そうです。\t \t \t(select count_big(1)from bit.Citiesここで、名前は '%1'のように指定します。 '%1%'のような名前は、 'ascii offset 0 rowsは、jsonパスの場合、次の10行だけ取り出します。') )oDataResultとして json auto、without_array_wrapper''' –

+0

結果は '' {"@ odata.context": "#metadata \/cities"、 "@ odata.count":3000、 "value":[{ "Id": "95ADC4B9-120E-4BDB-ABB7-000179B1F40B"、 "Name": "City14792"、 "ProvinceId": "2F013E2C-913E-40D4-9A2A-4F7905B5D440"}、...、{"Id": "F239515A-2C4B-41BA-9503-00274638BDC9"、 "名前": "City11372"、 "ProvinceId": "2F013E2C-913E-40D4-9A2A-4F7905B5D440"}]} '' '可能な限り@ odata.contextの列名があります。 json "path"はドットのネストされたオブジェクトを作成します。 私は "ODataResult"という名前の派生テーブルで最初の結果をラップしてからjson "auto"に使用しましたが、そのような結果は変わりません。魅力的な作品! ( - : –

0

これは機能しています...あなたの後のことは不明ですか?

DECLARE @X TABLE(Id INT) 
INSERT @X SELECT 1 
INSERT @X SELECT 2 
INSERT @X SELECT 3 

SELECT 
    * 
FROM 
    @X 
    INNER JOIN(SELECT YourCount=COUNT(*) FROM @X)AS X ON 1=1 

ここで、フィルタ節が分かっている場合の方が効率的です。

DECLARE @X TABLE(Id INT) 
INSERT @X SELECT 1 
INSERT @X SELECT 2 
INSERT @X SELECT 3 


DECLARE @MyFilterCount INT = (SELECT COUNT(*) FROM @X WHERE 1=1) 

SELECT 
    [email protected] 
    ,* 
FROM 
    @X 
+0

ありがとうございます、私はそれを確認する必要があります、私はここであなたに通知することができます。 –

+0

これは '' {{"MyCount":3、 "Id":1}、{"MyCount":3、 "Id":2}、{"MyCount":3、 "Id":3}を返します。 "{" Id:1}、{"Id":2}、{"Id":3}}} '' ' –

+0

と明らかに異なる{" MyCount "私は答えを加えました。 –