sql-servert-sqlstored-proceduresrestore-points

Convert Stored Procedure to Simple T-Sql


I am new to SQL Server and currently learning it. I got following stored procedure which I don't understand.

-- declare a new TABLE variable
DECLARE @Products TABLE
(RowNumber INT,
ProductID INT,
Name VARCHAR(50),
Description VARCHAR(5000),
Price MONEY,
Image1FileName VARCHAR(50),
Image2FileName VARCHAR(50),
OnDepartmentPromotion bit,
OnCatalogPromotion bit)

-- populate the table variable with the complete list of products
INSERT INTO @Products
SELECT ROW_NUMBER() OVER (ORDER BY Product.ProductID),
Product.ProductID, Name,
SUBSTRING(Description, 1, @DescriptionLength) + '...' AS Description, Price,
Image1FileName, Image2FileName, OnDepartmentPromotion, OnCatalogPromotion
FROM Product INNER JOIN ProductCategory
ON Product.ProductID = ProductCategory.ProductID
WHERE ProductCategory.CategoryID = @CategoryID
-- return the total number of products using an OUTPUT variable
SELECT @HowManyProducts = COUNT(ProductID) FROM @Products
-- extract the requested page of products
SELECT ProductID, Name, Description, Price, Image1FileName,
Image2FileName, OnDepartmentPromotion, OnCatalogPromotion
FROM @Products
WHERE RowNumber > (@PageNumber - 1) * @ProductsPerPage
AND RowNumber <= @PageNumber * @ProductsPerPage

Please! Convert above stored procedure into simple t-sql statements for me so that I get these points. I will really appreciate your work.

Thanks in advance


Solution

  • Something like this would work (I didn't test it):

    --extract the requested page of products
    SELECT ProductID, Name, Description, Price, Image1FileName,
    Image2FileName, OnDepartmentPromotion, OnCatalogPromotion
    FROM (
    SELECT ROW_NUMBER() OVER (ORDER BY Product.ProductID) AS RowNumber,
    Product.ProductID, Name,
    SUBSTRING(Description, 1, @DescriptionLength) + '...' AS Description, Price,
    Image1FileName, Image2FileName, OnDepartmentPromotion, OnCatalogPromotion
    FROM Product INNER JOIN ProductCategory
    ON Product.ProductID = ProductCategory.ProductID
    WHERE ProductCategory.CategoryID = @CategoryID
        ) A
    WHERE RowNumber > (@PageNumber - 1) * @ProductsPerPage
    AND RowNumber <= @PageNumber * @ProductsPerPage
    
    -- return the total number of products using an OUTPUT variable
    SELECT COUNT(ProductID) AS ProductCount FROM Product INNER JOIN ProductCategory
    ON Product.ProductID = ProductCategory.ProductID
    WHERE ProductCategory.CategoryID = @CategoryID