[英]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.