Il existe une différence entre la façon dont le code suivant s'exécute sur sql2008 et sql2000. en sql 2000 le résultat est correct (le fetch est normal de la première ligne à la dernière ligne) tandis qu'en sql 2008 le fetch montre un comportement étrange (commence à partir de la dernière ligne insérée jusqu'à la première ligne) ci-dessous est le code du problème où 'zone' est une table:sql 2008 différence de curseur avec sql2000?
create trigger tr on area for insert as
declare @id int
select @id = id from inserted
print 'trigger: ' + convert(varchar(50), @id)
declare c cursor scroll for select id from inserted order by id
open c
fetch next from c into @id
while @@FETCH_STATUS = 0
begin
print 'cursor id: ' + convert(varchar(50), @id)
fetch next from c into @id
end
close c
deallocate c
ci-dessous est le résultat showig dans SQL Server 2008:
trigger: 1828
cursor id: 1837
cursor id: 1836
cursor id: 1835
cursor id: 1834
cursor id: 1833
cursor id: 1832
cursor id: 1831
cursor id: 1830
cursor id: 1829
cursor id: 1828
et le résultat affiché dans SQL 2000 est:
trigger: 1837
cursor id: 1828
cursor id: 1829
cursor id: 1830
cursor id: 1831
cursor id: 1832
cursor id: 1833
cursor id: 1834
cursor id: 1835
cursor id: 1836
cursor id: 1837
Y at-il une option que je peux définir pour l'utiliser de la manière normale comme SQL 2000? –
Je connais le moyen d'ajouter "order by" pour votre instruction select. Cela fonctionne pour sql2000 et aussi pour sql2008. – NetSide