您的位置:首页 > 数据库

SQL SERVER 2008 游标使用示范

2011-11-09 17:38 459 查看
转载来自 MSDN

SET NOCOUNT ON

DECLARE @vendor_id int, @vendor_name nvarchar(50),

@message varchar(80), @product nvarchar(50)

PRINT '-------- Vendor Products Report --------'

DECLARE vendor_cursor CURSOR FOR

SELECT VendorID, Name

FROM Purchasing.Vendor

WHERE PreferredVendorStatus = 1

ORDER BY VendorID

OPEN vendor_cursor

FETCH NEXT FROM vendor_cursor

INTO @vendor_id, @vendor_name

WHILE @@FETCH_STATUS = 0

BEGIN

PRINT ' '

SELECT @message = '----- Products From Vendor: ' +

@vendor_name

PRINT @message

-- Declare an inner cursor based

-- on vendor_id from the outer cursor.

DECLARE product_cursor CURSOR FOR

SELECT v.Name

FROM Purchasing.ProductVendor pv, Production.Product v

WHERE pv.ProductID = v.ProductID AND

pv.VendorID = @vendor_id -- Variable value from the outer cursor

OPEN product_cursor

FETCH NEXT FROM product_cursor INTO @product

IF @@FETCH_STATUS <> 0

PRINT ' <<None>>'

WHILE @@FETCH_STATUS = 0

BEGIN

SELECT @message = ' ' + @product

PRINT @message

FETCH NEXT FROM product_cursor INTO @product

END

CLOSE product_cursor

DEALLOCATE product_cursor

-- Get the next vendor.

FETCH NEXT FROM vendor_cursor

INTO @vendor_id, @vendor_name

END

CLOSE vendor_cursor

DEALLOCATE vendor_cursor

=====================================================================================================

-- 来个做过注释的

-----------------------------------------

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

USE sfmis

GO

-- ================================================

IF EXISTS

(

SELECT *

FROM INFORMATION_SCHEMA.ROUTINES

WHERE SPECIFIC_SCHEMA = N'dbo' AND SPECIFIC_NAME = N'TotalTheProject'

)

DROP PROCEDURE [TotalTheProject]

GO

-- =============================================

-- Author: <Author,,Name>

-- Create date: <Create Date,,>

-- Description: <Description,,>

-- =============================================

CREATE PROCEDURE TotalTheProject

-- Add the parameters for the stored procedure here

@id_projects bigint

AS

BEGIN

-- SET NOCOUNT ON added to prevent extra result sets from

-- interfering with SELECT statements.

SET NOCOUNT ON;

-- 注意红色部分

-- 创建编号

declare @id_project_task bigint

-- 创建游标

DECLARE product_task_list CURSOR
local for

select id_project_task from dbo.project_task where id_projects = @id_projects ORDER BY id_projects

-- 打开游标

OPEN product_task_list

-- 遍历游标开始

FETCH NEXT FROM product_task_list INTO @id_project_task WHILE @@FETCH_STATUS = 0

BEGIN

-- 测试游标

select @id_project_task

-- 下一个

FETCH NEXT FROM product_task_list INTO @id_project_task

END

-- 关闭游标

CLOSE product_task_list

-- 释放游标

DEALLOCATE product_task_list

END

GO
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: