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'}]
}
考虑以下 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'}]
}