Primero necesitamos una tabla con cual trabajar aquí un script de una simple tabla:
- CREATE TABLE [Region](
- [RegionID] [INT] NOT NULL,
- [RegionDescription] [NCHAR](50) NOT NULL
- )
- INSERT INTO [Region](
- [RegionID],
- [RegionDescription]
- )
- SELECT 1,'Eastern' UNION ALL
- SELECT 2,'Western' UNION ALL
- SELECT 3,'Northern' UNION ALL
- SELECT 4,'Southern'
El script del cursor seria el siguiente:
- DECLARE @RegionID INT,
- @RegionDescription NCHAR(50)
- DECLARE my_cursor CURSOR FAST_FORWARD READ_ONLY
- FOR
- SELECT RegionID,
- RegionDescription
- FROM Region WITH(NOLOCK)
- OPEN my_cursor
- FETCH FROM my_cursor INTO @RegionID, @RegionDescription
- WHILE @@FETCH_STATUS = 0
- BEGIN
- -------
- SELECT @RegionID,
- @RegionDescription
- -------
- FETCH FROM my_cursor INTO @RegionID, @RegionDescription
- END
- CLOSE my_cursor
- DEALLOCATE my_cursor
Usar cursores tiene sus desventajas, ya que bloquea la tabla, usan mucha memoria y son lentos.
Una alternativa a estos podría ser el siguiente script que simula el funcionamiento de un cursor apoyándose en unas variables de control y un simple bucle:
- DECLARE @iReturnCode INT,
- @iNextRowId INT,
- @iCurrentRowId INT,
- @iLoopControl INT,
- @RegionID INT,
- @RegionDescription NCHAR(50)
- SET NOCOUNT ON
- SELECT @iLoopControl = 1
- SELECT @iNextRowId = MIN(r.RegionID)
- FROM Region r WITH(NOLOCK)
- IF ISNULL(@iNextRowId, 0) = 0
- BEGIN
- RETURN
- END
- SELECT @iCurrentRowId = r.RegionID,
- @RegionID = r.RegionID,
- @RegionDescription = r.RegionDescription
- FROM Region r WITH(NOLOCK)
- WHERE r.RegionID = @iNextRowId
- WHILE @iLoopControl = 1
- BEGIN
- SELECT @iNextRowId = NULL
- SELECT @iNextRowId = MIN(r.RegionID)
- FROM Region r WITH(NOLOCK)
- WHERE r.RegionID > @iCurrentRowId
- -------
- SELECT @RegionID,
- @RegionDescription
- -------
- IF ISNULL(@iNextRowId, 0) = 0
- BEGIN
- BREAK
- END
- SELECT @iCurrentRowId = r.RegionID,
- @RegionID = r.RegionID,
- @RegionDescription = r.RegionDescription
- FROM Region r WITH(NOLOCK)
- WHERE r.RegionID = @iNextRowId
- END
0 comentarios:
Publicar un comentario