Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从MSSQL Server中的存储过程返回表和标量_Sql_Sql Server_Stored Procedures - Fatal编程技术网

从MSSQL Server中的存储过程返回表和标量

从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

我想通过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 #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属性,该属性将获取行数。