Sql 返回数据并作为json一起计数

Sql 返回数据并作为json一起计数,sql,sql-server,json,sql-server-2016,Sql,Sql Server,Json,Sql Server 2016,考虑下表: [Id: 1, Name: "A1"], [Id: 2, Name: "A2"], ... [Id: 100, Name: "A100"] 我需要Id的数据,这是有效的…你想要的是什么还不清楚 DECLARE @X TABLE(Id INT) INSERT @X SELECT 1 INSERT @X SELECT 2 INSERT @X SELECT 3 SELECT * FROM @X INNER JOIN(SELECT YourCount

考虑下表:

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

我需要Id的数据,这是有效的…你想要的是什么还不清楚

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
当filter子句已知时,这里有一种更有效的方法

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  
    MyCount=@MyFilterCount
    ,* 
FROM 
    @X
我找到了解决办法

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

您不需要查询页面变量。只需在结果集中投影一个计算字段。谢谢,我需要检查一下,然后我可以在这里通知您。它返回这个[{MyCount:3,Id:1},{MyCount:3,Id:2},{MyCount:3,Id:3}],这显然不同于{MyCount:3,data:[{Id:1},{Id:2},{Id:3}],我添加了答案。限制不是标准Sql Server语法。你没有出错吗?是的,你是对的。完整但复杂的答案是从中选择*从中选择“元数据/城市”作为“@odata.context”,从位中选择count_big1从名为“%1%”的城市作为“@odata.count”,从位中选择*从名为“%1%”的城市按Id排序asc偏移量0行仅为json路径提取下10行作为“值”作为json自动的ODataResult,如果没有{@odata.context:metadata\/cities,@odata.count:3000,值:[{Id:95ADC4B9-120E-4BDB-ABB7-000179B1F40B,名称:City14792,ProvinceId:2F013E2C-913E-40D4-9A2A-4F7905B5D440},{Id:f2395515a-2C4B-41BA-9503-00274638BDC9,名称:City11372,ProvinceId:2f013c-913E-40D4-40D4-054f4a},您可以看到,},这里有一个@odata.context列名。json路径为点创建嵌套对象。因此,我将第一个结果包装在名为ODataResult的派生表中,然后用于json auto,它不会像那样更改结果。工作起来很有魅力bit.cities表脚本:创建表[bit]。[cities][Id][uniqueidentifier]不为NULL,[Name][nvarchar]max NULL,[ProvinceId][uniqueidentifier]不为NULL
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  
    MyCount=@MyFilterCount
    ,* 
FROM 
    @X
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'}]
}