sql >> Database >  >> RDS >> Mysql

MySQL LIMIT-clausule equivalent voor SQL SERVER

In SQL Server 2012 is er ondersteuning voor de ANSI-standaard OFFSET / FETCH syntaxis. Ik heb geblogd over dit en hier is het officiële document (dit is een uitbreiding op ORDER BY ). Uw syntaxis geconverteerd voor SQL Server 2012 zou zijn:

SELECT ID, Name, Price, Image 
  FROM Products 
  ORDER BY ID ASC 
  OFFSET (@start_from - 1) ROWS -- not sure if you need -1
    -- because I don't know how you calculated @start_from
  FETCH NEXT @items_on_page ROWS ONLY;

Daarvoor moet u verschillende tijdelijke oplossingen gebruiken, waaronder de ROW_NUMBER() methode. Zie dit artikel en de vervolgdiscussie . Als u geen SQL Server 2012 gebruikt, kunt u de standaardsyntaxis of de niet-standaard LIMIT van MySQL niet gebruiken maar u kunt een uitgebreidere oplossing gebruiken, zoals:

;WITH o AS
(
    SELECT TOP ((@start_from - 1) + @items_on_page)
         -- again, not sure if you need -1 because I 
         -- don't know how you calculated @start_from
      RowNum = ROW_NUMBER() OVER (ORDER BY ID ASC)
      /* , other columns */
    FROM Products
)
SELECT 
    RowNum
    /* , other columns */
FROM
    o
WHERE
    RowNum >= @start_from
ORDER BY
    RowNum;

Er zijn veel andere manieren om deze kat te villen. Het is onwaarschijnlijk dat dit de meest efficiënte is, maar qua syntaxis is dit waarschijnlijk het eenvoudigst. Ik raad aan om de links die ik heb gepost te bekijken, evenals de dubbele suggesties die zijn vermeld in de opmerkingen bij de vraag.



  1. Groeperen in interval van 5 minuten binnen een tijdsbereik

  2. EF 6 - Hoe parallelle queries correct uit te voeren

  3. Is uw database beveiligd? Denk opnieuw

  4. Oracle:exporteer een tabel met blobs naar een .sql-bestand dat opnieuw kan worden geïmporteerd