Aquí es cómo lo haría:
Select Identity(int, 1,1) AS PK, DatabaseID
Into #T
From @databases
Declare @maxPK int;Select @maxPK = MAX(PK) From #T
Declare @pk int;Set @pk = 1
While @pk <= @maxPK
Begin
-- Get one record
Select DatabaseID, Name, Server
From @databases
Where DatabaseID = (Select DatabaseID From #T Where PK = @pk)
--Do some processing here
--
Select @pk = @pk + 1
End
[Editar] Debido a que probablemente salté la palabra "variable" cuando leí por primera vez la cuestión, aquí es una respuesta actualizada ...
declare @databases table
(
PK int IDENTITY(1,1),
DatabaseID int,
Name varchar(15),
Server varchar(15)
)
-- insert a bunch rows into @databases
--/*
INSERT INTO @databases (DatabaseID, Name, Server) SELECT 1,'MainDB', 'MyServer'
INSERT INTO @databases (DatabaseID, Name, Server) SELECT 1,'MyDB', 'MyServer2'
--*/
Declare @maxPK int;Select @maxPK = MAX(PK) From @databases
Declare @pk int;Set @pk = 1
While @pk <= @maxPK
Begin
/* Get one record (you can read the values into some variables) */
Select DatabaseID, Name, Server
From @databases
Where PK = @pk
/* Do some processing here */
/* ... */
Select @pk = @pk + 1
End
¿Nos puede proporcionar la razón por la que desea iterar sobre las filas, otra solución que no es necesario que exista iteración (y que son más rápidos por un margen grande en la mayoría de los casos) –
de acuerdo con el pop ... puede no necesitar un cursor según la situación. pero no hay problema con el uso de cursores si necesita – Shawn
http://wiki.lessthandot.com/index.php/Cursors_and_How_to_Avoid_Them – HLGEM