Håller på att konvertera ett projekt från SQL-server 6.5 till 7:an och har Den andra cursorn (cur_Territory) kompileras vid declare-satsen med det @employeeid som gäller just då, dvs ingenting alls eftersom den inte är satt ännu. Ok...Nested cursors i SQL-Server 7
stött på rejäla problem när det gäller nested cursors.
Bifogar ett litet exempel nedan (Northwind).
Här vill jag då plocka ut anställda och sedan visa vilka regioner de har.
Detta fungerar utmärkt i SQL 6.5 och jag får ett resultat som ser ut så här:
Anställd1
Region1
Region2
Anställd2
Region1
osv...
I SQL 7 får jag endast ut de anställda.
Någon som har stött på samma problem? Tacksam för svar.
CREATE PROCEDURE SP_NestedCursorsTest AS
declare @EmployeeID int
declare @LastName nvarchar (20)
declare @FirstName nvarchar (10)
declare @TerritoryID nvarchar (20)
declare @Temp nvarchar (200)
declare cur_Employee cursor for
select EmployeeID,
LastName,
FirstName
from Employees
for READ ONLY
declare cur_Territory cursor for
select TerritoryID
from EmployeeTerritories
where EmployeeID = @EmployeeID
for READ ONLY
open cur_Employee
fetch next
from cur_Employee
into @EmployeeID,
@LastName,
@FirstName
while (@@Fetch_Status = 0)
begin
select @Temp = @FirstName + ' ' + @LastName
print @Temp
open cur_Territory
fetch next
from cur_Territory
into @TerritoryID
while (@@Fetch_Status = 0)
begin
print @TerritoryID
fetch next
from cur_Territory
into @TerritoryID
end
close cur_Territory
fetch next
from cur_Employee
into @EmployeeID,
@LastName,
@FirstName
end
deallocate cur_Territory
close cur_Employee
deallocate cur_Employee
GOSv: Nested cursors i SQL-Server 7
Denna proceduren fungerar (om den är så smart vet jag inte riktigt dock, jag hade försökt hitta nåt annat sätt att lösa det):
CREATE PROCEDURE SP_NestedCursorsTest AS
declare @EmployeeID int
declare @LastName nvarchar (20)
declare @FirstName nvarchar (10)
declare @TerritoryID nvarchar (20)
declare @Temp nvarchar (200)
declare cur_Employee cursor for
select EmployeeID,
LastName,
FirstName
from Employees
for READ ONLY
open cur_Employee
fetch next
from cur_Employee
into @EmployeeID,
@LastName,
@FirstName
while (@@Fetch_Status = 0)
begin
select @Temp = @FirstName + ' ' + @LastName
print @Temp
declare cur_Territory cursor for
select TerritoryID
from EmployeeTerritories
where EmployeeID = @EmployeeID
for READ ONLY
open cur_Territory
fetch next
from cur_Territory
into @TerritoryID
while (@@Fetch_Status = 0)
begin
print @TerritoryID
fetch next
from cur_Territory
into @TerritoryID
end
close cur_Territory
deallocate cur_Territory
fetch next
from cur_Employee
into @EmployeeID,
@LastName,
@FirstName
end
close cur_Employee
deallocate cur_Employee
GOSv: Nested cursors i SQL-Server 7
Det känns ju dock lite tungt att behöva deklarera och deallokera cursorn i ett.
Borde väl inte direkt förbättra prestandan (!?).
Men är det så det skall göras får jag väl acceptera detta.
Tack för svaret hur som helst!