Quantcast
Channel: CodeSection,代码区,SQL Server(mssql)数据库 技术分享 - CodeSec
Viewing all articles
Browse latest Browse all 3160

How to Use Cursors and While loop in SQL Server

$
0
0

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.


How to Use Cursors and While loop in SQL Server

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)) GO

tbl_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] GO

Demo 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_

Viewing all articles
Browse latest Browse all 3160

Trending Articles