In this article we will learn How to Use Cursors and while loop in SQL Server.
Table of Contents
Background
Create two table
Cursors
While loop
Conclusion
Background:Normally, when we need data looping then we use Cursors or While loop in SQL server. Both are used with multiple rows to give decisions row-by-row basis.

Fig: Looping
Create Database: CREATE DATABASE SalesDB;Here, SalesDB is name of Database
Create Table:We will create two Table. Once is tbl_DailySales and other is tbl_Product
tbl_DailySales:
USE [SalesDB] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[tbl_DailySales]( [DailySaleID] [int] IDENTITY(1,1) NOT NULL, [ProductID] [int] NULL, [SalesPrice] [decimal](18, 2) NULL, [Discount(%)] [decimal](18, 0) NULL, [Description] [nvarchar](50) NULL, [Date] [datetime] NULL, CONSTRAINT [PK_tbl_DailySales] PRIMARY KEY CLUSTERED ( [DailySaleID] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] GO Demo Data for tbl_DailySales GO INSERT [dbo].[tbl_DailySales] ([DailySaleID], [ProductID], [SalesPrice], [Discount(%)], [Description], [Date]) VALUES (1, 1, CAST(2000.00 AS Decimal(18, 2)), CAST(10 AS Decimal(18, 0)), N'', CAST(N'2016-09-09 00:00:00.000' AS DateTime)) GO INSERT [dbo].[tbl_DailySales] ([DailySaleID], [ProductID], [SalesPrice], [Discount(%)], [Description], [Date]) VALUES (2, 2, CAST(5000.00 AS Decimal(18, 2)), CAST(5 AS Decimal(18, 0)), N'', CAST(N'2016-09-09 00:00:00.000' AS DateTime)) GO INSERT [dbo].[tbl_DailySales] ([DailySaleID], [ProductID], [SalesPrice], [Discount(%)], [Description], [Date]) VALUES (3, 1, CAST(2000.00 AS Decimal(18, 2)), CAST(10 AS Decimal(18, 0)), N'', CAST(N'2016-09-09 00:00:00.000' AS DateTime)) GO INSERT [dbo].[tbl_DailySales] ([DailySaleID], [ProductID], [SalesPrice], [Discount(%)], [Description], [Date]) VALUES (4, 3, CAST(3500.00 AS Decimal(18, 2)), CAST(7 AS Decimal(18, 0)), N'', CAST(N'2016-09-09 00:00:00.000' AS DateTime)) GO INSERT [dbo].[tbl_DailySales] ([DailySaleID], [ProductID], [SalesPrice], [Discount(%)], [Description], [Date]) VALUES (5, 5, CAST(2000.00 AS Decimal(18, 2)), CAST(10 AS Decimal(18, 0)), N'', CAST(N'2016-09-09 00:00:00.000' AS DateTime)) GO INSERT [dbo].[tbl_DailySales] ([DailySaleID], [ProductID], [SalesPrice], [Discount(%)], [Description], [Date]) VALUES (6, 4, CAST(2000.00 AS Decimal(18, 2)), CAST(10 AS Decimal(18, 0)), N'', CAST(N'2016-09-09 00:00:00.000' AS DateTime)) GO INSERT [dbo].[tbl_DailySales] ([DailySaleID], [ProductID], [SalesPrice], [Discount(%)], [Description], [Date]) VALUES (7, 1, CAST(2000.00 AS Decimal(18, 2)), CAST(10 AS Decimal(18, 0)), N'', CAST(N'2016-09-09 00:00:00.000' AS DateTime)) GO INSERT [dbo].[tbl_DailySales] ([DailySaleID], [ProductID], [SalesPrice], [Discount(%)], [Description], [Date]) VALUES (8, 2, CAST(5000.00 AS Decimal(18, 2)), CAST(5 AS Decimal(18, 0)), N'', CAST(N'2016-09-10 00:00:00.000' AS DateTime)) GO INSERT [dbo].[tbl_DailySales] ([DailySaleID], [ProductID], [SalesPrice], [Discount(%)], [Description], [Date]) VALUES (9, 1, CAST(2000.00 AS Decimal(18, 2)), CAST(10 AS Decimal(18, 0)), N'', CAST(N'2016-09-10 00:00:00.000' AS DateTime)) GO INSERT [dbo].[tbl_DailySales] ([DailySaleID], [ProductID], [SalesPrice], [Discount(%)], [Description], [Date]) VALUES (10, 3, CAST(3500.00 AS Decimal(18, 2)), CAST(7 AS Decimal(18, 0)), N'', CAST(N'2016-09-10 00:00:00.000' AS DateTime)) GO INSERT [dbo].[tbl_DailySales] ([DailySaleID], [ProductID], [SalesPrice], [Discount(%)], [Description], [Date]) VALUES (11, 5, CAST(2000.00 AS Decimal(18, 2)), CAST(10 AS Decimal(18, 0)), N'', CAST(N'2016-09-10 00:00:00.000' AS DateTime)) GO INSERT [dbo].[tbl_DailySales] ([DailySaleID], [ProductID], [SalesPrice], [Discount(%)], [Description], [Date]) VALUES (12, 4, CAST(2000.00 AS Decimal(18, 2)), CAST(10 AS Decimal(18, 0)), N'', CAST(N'2016-09-11 00:00:00.000' AS DateTime)) GO INSERT [dbo].[tbl_DailySales] ([DailySaleID], [ProductID], [SalesPrice], [Discount(%)], [Description], [Date]) VALUES (13, 1, CAST(2000.00 AS Decimal(18, 2)), CAST(10 AS Decimal(18, 0)), N'', CAST(N'2016-09-11 00:00:00.000' AS DateTime)) GO INSERT [dbo].[tbl_DailySales] ([DailySaleID], [ProductID], [SalesPrice], [Discount(%)], [Description], [Date]) VALUES (14, 2, CAST(5000.00 AS Decimal(18, 2)), CAST(5 AS Decimal(18, 0)), N'', CAST(N'2016-09-11 00:00:00.000' AS DateTime)) GO INSERT [dbo].[tbl_DailySales] ([DailySaleID], [ProductID], [SalesPrice], [Discount(%)], [Description], [Date]) VALUES (15, 1, CAST(2000.00 AS Decimal(18, 2)), CAST(10 AS Decimal(18, 0)), N'', CAST(N'2016-09-11 00:00:00.000' AS DateTime)) GO INSERT [dbo].[tbl_DailySales] ([DailySaleID], [ProductID], [SalesPrice], [Discount(%)], [Description], [Date]) VALUES (16, 3, CAST(3500.00 AS Decimal(18, 2)), CAST(7 AS Decimal(18, 0)), N'', CAST(N'2016-09-11 00:00:00.000' AS DateTime)) GO INSERT [dbo].[tbl_DailySales] ([DailySaleID], [ProductID], [SalesPrice], [Discount(%)], [Description], [Date]) VALUES (17, 5, CAST(2000.00 AS Decimal(18, 2)), CAST(10 AS Decimal(18, 0)), N'', CAST(N'2016-09-11 00:00:00.000' AS DateTime)) GO INSERT [dbo].[tbl_DailySales] ([DailySaleID], [ProductID], [SalesPrice], [Discount(%)], [Description], [Date]) VALUES (18, 4, CAST(2000.00 AS Decimal(18, 2)), CAST(10 AS Decimal(18, 0)), N'', CAST(N'2016-09-11 00:00:00.000' AS DateTime)) GO INSERT [dbo].[tbl_DailySales] ([DailySaleID], [ProductID], [SalesPrice], [Discount(%)], [Description], [Date]) VALUES (19, 1, CAST(2000.00 AS Decimal(18, 2)), CAST(10 AS Decimal(18, 0)), N'', CAST(N'2016-09-11 00:00:00.000' AS DateTime)) GO INSERT [dbo].[tbl_DailySales] ([DailySaleID], [ProductID], [SalesPrice], [Discount(%)], [Description], [Date]) VALUES (20, 2, CAST(5000.00 AS Decimal(18, 2)), CAST(5 AS Decimal(18, 0)), N'', CAST(N'2016-09-11 00:00:00.000' AS DateTime)) GO INSERT [dbo].[tbl_DailySales] ([DailySaleID], [ProductID], [SalesPrice], [Discount(%)], [Description], [Date]) VALUES (21, 1, CAST(2000.00 AS Decimal(18, 2)), CAST(10 AS Decimal(18, 0)), N'', CAST(N'2016-09-11 00:00:00.000' AS DateTime)) GO INSERT [dbo].[tbl_DailySales] ([DailySaleID], [ProductID], [SalesPrice], [Discount(%)], [Description], [Date]) VALUES (22, 3, CAST(3500.00 AS Decimal(18, 2)), CAST(7 AS Decimal(18, 0)), N'', CAST(N'2016-09-11 00:00:00.000' AS DateTime)) GO INSERT [dbo].[tbl_DailySales] ([DailySaleID], [ProductID], [SalesPrice], [Discount(%)], [Description], [Date]) VALUES (23, 5, CAST(2000.00 AS Decimal(18, 2)), CAST(10 AS Decimal(18, 0)), N'', CAST(N'2016-09-11 00:00:00.000' AS DateTime)) GO INSERT [dbo].[tbl_DailySales] ([DailySaleID], [ProductID], [SalesPrice], [Discount(%)], [Description], [Date]) VALUES (24, 4, CAST(2000.00 AS Decimal(18, 2)), CAST(10 AS Decimal(18, 0)), N'', CAST(N'2016-09-11 00:00:00.000' AS DateTime)) GOtbl_Product:
USE [SalesDB] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[tbl_Product]( [ProductID] [int] IDENTITY(1,1) NOT NULL, [Name] [nvarchar](50) NULL, [Grade] [nvarchar](10) NULL, [Description] [nvarchar](50) NULL, CONSTRAINT [PK_tbl_Product] PRIMARY KEY CLUSTERED ( [ProductID] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] GODemo Data for tbl_Product
GO INSERT [dbo].[tbl_product] ([ProductID], [Name], [Grade], [Description]) VALUES (1, N'Product-1', N'A', NULL) GO INSERT [dbo].[tbl_product] ([ProductID], [Name], [Grade], [Description]) VALUES (2, N'Product-2', N'B', NULL) GO INSERT [dbo].[tbl_product] ([ProductID], [Name], [Grade], [Description]) VALUES (3, N'Product-3', N'A', NULL) GO INSERT [dbo].[tbl_