从MSSQL Server中的存储过程返回表和标量
我想通过SP的OUT参数返回表数据和表数据的计数。计数不是表数据在其最终状态下的计数,而是表数据在执行TOP 100之前只返回100行。我想下面是我想要的,但是有没有更有效的方法来实现这一点从MSSQL Server中的存储过程返回表和标量,sql,sql-server,stored-procedures,Sql,Sql Server,Stored Procedures,我想通过SP的OUT参数返回表数据和表数据的计数。计数不是表数据在其最终状态下的计数,而是表数据在执行TOP 100之前只返回100行。我想下面是我想要的,但是有没有更有效的方法来实现这一点 CREATE PROC sp_total_recs @total_recs INT OUT AS BEGIN -- return top 100 records only SELECT TOP 100 * INTO #t
CREATE PROC sp_total_recs
@total_recs INT OUT
AS
BEGIN
-- return top 100 records only
SELECT TOP 100 *
INTO #temp
FROM
(
SELECT *, COUNT(1) OVER () AS total_records
FROM table
) T;
SET @total_recs = (SELECT DISTINCT total_records FROM #temp);
SELECT *
FROM #temp;
DROP TABLE #temp;
RETURN
END;
DECLARE @tot_recs INT;
EXEC sp_total_recs
@total_recs = @tot_recs OUTPUT;
你要把它还给什么?就在SSMS里?你能显示你预期的输出吗?稍微绕道…你应该考虑不要使用SPY前缀(或者更好的是,根本没有前缀)。该前缀由MS保留,除了一些其他真正有趣的问题外,还可能导致性能问题。使用TOP时,您还应该使用ORDER BY或您现在拥有的确保返回哪些行的方法。@SeanLange稍微绕道一点:-)即使使用
ORDER BY
,如果您不使用TIES添加(例外:要排序的唯一值)
:-)@Shnugo good point.:(更好:不可预测的)行我同意@Shnugo。返回数据和计数有点愚蠢。把桌子还给我。不确定您的c#是如何检索此信息的,但几乎每个您将其拉入的对象都有一个count属性,该属性将获取行数。