Oto jak zrobiłbym to:
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
[Edytuj] Bo prawdopodobnie pominięte słowo „zmienna”, kiedy pierwszy raz przeczytać pytanie, tutaj jest zaktualizowaną odpowiedź ...
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
mógł Pan podać nam dlaczego chcesz iteracyjne nad rzędów, inne rozwiązanie nie wymagają iteracji, która mogłaby istnieć (i które są w większości przypadków szybsze z większego marginesu) –
zgadzam się z pop ... może nie potrzebować kursora w zależności od sytuacji. ale nie ma problemu z używaniem kursorów, jeśli potrzebujesz – Shawn
http://wiki.lessthandot.com/index.php/Cursors_and_How_to_Avoid_Them – HLGEM