return 条数据,一起算作 json

return data and count as json toghether

考虑以下 table:

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

我需要 Id <= 50 的数据,带分页。所以我写

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

然后我执行另一个查询

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

然后我returnjson这样给客户

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

如何使用 1 select 在 SQL Server 2016 中创建 json 并仅往返于数据库?

这行得通...您不清楚它是什么。

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'}]
}