2010-06-17 7 views
1

moment je suis en utilisant ROW_NUMBER() dans ma procédure dans SQL Server 2008 comme suit:ROW_NUMBER Alternative pour SQL Server 2000

WITH cars as(SELECT carid,mileage,retailprice,imageurl,model,year, 
      Zips.Distance AS Miles, Manufacturers.mfgName as Make, 
      dealers.companyname as companyname, CASE @sortby 
WHEN 'D' THEN ROW_NUMBER() OVER (ORDER BY Manufacturers.mfgName) 
WHEN 'P' THEN ROW_NUMBER() OVER (ORDER BY retailprice) 
WHEN 'M' THEN ROW_NUMBER() OVER (ORDER BY mileage) 
END as 'rownum' 
FROM usedcars INNER JOIN #TempZips Zips ON Zips.ZipCode =usedcars.loczip 
left join Manufacturers on Manufacturers.mfgid=usedcars.mfgid 
left join dealers on dealers.dealerid = usedcars.dealerid 
where usedcars.active=1 and [email protected]) 
select @totalrecords as totalrec,* from cars 
where rownum between @skip and @take 

Y at-il un équivalent à ce qui fonctionne dans SQL2000? (ROW_NUMBER n'a pas été introduit avant SQL2005).

+0

Pourquoi l'avez-vous développé dans SQL Server 2008? Cela est si gênant dans SQL Server 2000. – gbn

+1

Si SQL 2000 devait être la base de données minimale prise en charge, tout développement devrait avoir eu lieu dans SQL 2000 pour éviter cette situation où une fonctionnalité d'un produit ultérieur est utilisée "accidentellement". Ma suggestion serait de recommander que le client mise à niveau vers SQL 2005 ou plus tard comme le montant de l'effort pour adapter la solution à travailler dans SQL 2000, sera plus que le coût de la mise à niveau. – Thomas

+0

Je comprends complètement. C'est quelque chose que notre client a acheté et ils ne veulent pas mettre à niveau vers SQL Server 2008 ou 2005 – iosdevnyc

Répondre

4

Vous pouvez créer une table temporaire avec une colonne d'identité et y insérer vos données.

Ensuite, utilisez la table temporaire.

+1

Voir MS KB http://support.microsoft.com/kb/186133/en-us pour quelques exemples de cela. – BradC

+0

3 tables temporaires car vous ne pouvez avoir qu'une seule IDENTITÉ par table ... – gbn