sql >> Database >  >> RDS >> Sqlserver

Waarom Select Top 100 Percent gebruiken?

Het werd gebruikt voor "tussenliggende materialisatie (Google-zoekopdracht)"

Goed artikel:Adam Machanic:de geheimen van intermediaire materialisatie verkennen

Hij heeft zelfs een MS Connect grootgebracht zodat het op een schonere manier kan

Mijn mening is "niet inherent slecht", maar gebruik het niet tenzij 100% zeker. Het probleem is dat het alleen werkt op het moment dat je het doet en waarschijnlijk niet later (patchniveau, schema, index, rijtellingen enz.)...

Uitgewerkt voorbeeld

Dit kan mislukken omdat je niet weet in welke volgorde dingen worden geëvalueerd

SELECT foo From MyTable WHERE ISNUMERIC (foo) = 1 AND CAST(foo AS int) > 100

En dit kan ook mislukken omdat

SELECT foo
FROM
    (SELECT foo From MyTable WHERE ISNUMERIC (foo) = 1) bar
WHERE
    CAST(foo AS int) > 100

Dit gebeurde echter niet in SQL Server 2000. De innerlijke query wordt geëvalueerd en in de wachtrij geplaatst:

SELECT foo
FROM
    (SELECT TOP 100 PERCENT foo From MyTable WHERE ISNUMERIC (foo) = 1 ORDER BY foo) bar
WHERE
    CAST(foo AS int) > 100

Let op, dit werkt nog steeds in SQL Server 2005

SELECT TOP 2000000000 ... ORDER BY...


  1. 2 manieren om partitie-informatie te krijgen voor een tabel in SQL Server (T-SQL)

  2. Voorbeelden van het converteren van 'date' naar 'datetime' in SQL Server (T-SQL)

  3. Oracle XMLType-kolom in slaapstand gebruiken

  4. postgresql retourneert 0 als de geretourneerde waarde null is