简体   繁体   English

如何在Select语句中的sql存储过程中设置值以输出参数?

[英]How Can I Set Value To output parameter in sql stored procedure within select statement?

I have Stored Procedure in sql server 2008 used to paginating data returned from product table in database. 我已在sql server 2008中使用存储过程对数据库中产品表返回的数据进行分页。 what i want is return total pages count in the same select statement 我想要的是在相同的select语句中返回总页数

ALTER PROCEDURE [dbo].[SP_GetProducts]
    @PageSize int = 10, 
    @PageNumber int = 1,
    @ProductCode nvarchar(50) = null,
    @ProductName nvarchar(100) = null,
    @TotalPages int = null output 
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;


    SELECT TOP (@PageSize) *, @TotalPages = COUNT(*)  FROM (
        SELECT ROW_NUMBER() OVER (ORDER BY ProductId ASC) offset, * FROM (
         SELECT *, count(*) over() AS TotalRows
         FROM Products
        ) myquery
        ) paginator
        WHERE offset >= (((@PageSize * @PageNumber) - @PageSize)) +1 and offset <= (@PageSize * @PageNumber)

you cannot retrieve values from a Select statement and assign value to a variable at the same time. 您不能从Select语句中检索值并将值同时分配给变量。 In your particular case since you are only assigning the number or rows returned from your select statement you can use a slightly different approach to get what you want. 在您的特定情况下,由于仅分配从select语句返回的数字或行,因此可以使用稍微不同的方法来获取所需的内容。

ALTER PROCEDURE [dbo].[SP_GetProducts]
    @PageSize int = 10, 
    @PageNumber int = 1,
    @ProductCode nvarchar(50) = null,
    @ProductName nvarchar(100) = null,
    @TotalPages int = null output 
AS
BEGIN
    SET NOCOUNT ON;

    SELECT TOP (@PageSize) * 
     FROM (
           SELECT ROW_NUMBER() OVER (ORDER BY ProductId ASC) offset, * 
              FROM (
                    SELECT *, count(*) over() AS TotalRows
                    FROM Products
           ) myquery
        ) paginator
        WHERE offset >= (((@PageSize * @PageNumber) - @PageSize)) +1 
         AND offset <= (@PageSize * @PageNumber)

    -- here assign value to your output parameter using the following

     SELECT @TotalPages = @@ROWCOUNT;
END

Note 注意

Avoid using SELECT * instead use Column names, only the columns you actually want to retrieve. 避免使用SELECT *而应使用列名,而只使用您实际要检索的列。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 是否可以将select语句的结果作为参数的值传递到存储过程中? - Can I pass the result of a select statement as a value for a parameter into a stored procedure? SQL IF在SELECT语句中设置参数值 - SQL IF to Set Parameter Value Within SELECT Statement 如何将SELECT语句作为参数传递给SQL Server中的存储过程? - How to pass the SELECT statement as a parameter to stored procedure in SQL Server? 如何在If else语句中的SQL存储过程中设置和返回列值 - How to set and return a column Value in SQL Stored Procedure within If else statement 如何在sql语句中循环存储过程 - How do I loop through a stored procedure within a sql statement 我如何提交在存储过程中接收参数的存储过程? - how I can submit a stored procedure that receives parameter within a stored procedure? 如何在sql存储过程中使用IF语句 - How can I use IF statement in sql stored-procedure SQL Server 2000-使用SELECT语句的存储过程参数值 - SQL Server 2000 - Stored procedure parameter values with a SELECT statement SQL存储过程:如何连接参数值? - SQL stored procedure: how to concatenate parameter value? 如何将SELECT语句结果作为参数传递给SQL Server存储过程中的函数? - How to pass SELECT statement result as parameter to function in stored procedure in SQL Server?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM