我有 3 个表 A、B 和 C。在存储过程中,我使用查询来获取结果,但我还想要从上述查询中获得的记录总数。这可能吗。我尝试使用这样的东西
Select count(*)
from (
select A.Name,B.Address,C.grade
from A,B,C
where A.id=B.id
AND B.Tlno=C.tlno
)
但这不起作用。
我有 3 个表 A、B 和 C。在存储过程中,我使用查询来获取结果,但我还想要从上述查询中获得的记录总数。这可能吗。我尝试使用这样的东西
Select count(*)
from (
select A.Name,B.Address,C.grade
from A,B,C
where A.id=B.id
AND B.Tlno=C.tlno
)
但这不起作用。
(1) 停止使用旧式 x,y,z 连接。
SELECT A.Name,B.Address,C.grade
FROM dbo.A
INNER JOIN dbo.B ON A.id = B.id
INNER JOIN dbo.C ON B.Tlno = C.tlno;
(2) 您可以将 count(*) over() 添加到整个结果集中。这有点浪费,因为它返回每一行的计数:
SELECT A.Name, B.Address, C.grade, row_count = COUNT(*) OVER ()
FROM dbo.A
INNER JOIN dbo.B ON A.id = B.id
INNER JOIN dbo.C ON B.Tlno = C.tlno;
您可以使用窗口功能:
select A.Name,
B.Address,
C.grade,
count(*) over () as total_count
from A,B,C
where A.id=B.id
AND B.Tlno=C.tlno
这将返回每一行的总计数(但所有行的数字都是相同的)。
使用如下表变量
declare @num table (accname varchar(200),subnet varchar(200))
insert into @num(accname,subnet) Select a.accountname,s.subnet from tbl_accounts a,tbl_accountsubnet s where a.accountid=s.accountid
select COUNT(*) from @num;
替代方法是使用 @@rowcount 关键字:
SELECT A.Name, B.Address, C.grade, @@rowcount
FROM dbo.A
INNER JOIN dbo.B ON A.id = B.id
INNER JOIN dbo.C ON B.Tlno = C.tlno;
但是与窗口函数的结果相同,因此您可以获得每行的总数。我很好奇两者之间是否存在性能差异......(不幸的是,我当前的客户没有 SHOWPLAN 权限)