sql >> Database teknologi >  >> RDS >> Sqlserver

Beregner SQL Server ROW_NUMBER() OVER() for en afledt tabel

Row_Number() OVER (ORDER BY (SELECT 1)) trick skal IKKE ses som en måde at undgå at ændre rækkefølgen af ​​underliggende data. Det er kun et middel til at undgå at få serveren til at udføre en ekstra og unødvendig sortering (den kan stadig udføre sorteringen, men det kommer til at koste det mindst mulige beløb sammenlignet med sortering efter en kolonne).

Alle forespørgsler i SQL-serveren SKAL ABSOLUT har en ORDER BY klausul i den yderste forespørgsel for at sikre, at resultaterne kan sorteres pålideligt på en garanteret måde.

Begrebet "bevare original orden" eksisterer ikke i relationelle databaser. Tabeller og forespørgsler skal altid betragtes som uordnede indtil og medmindre en ORDER BY klausul er angivet i den yderste forespørgsel.

Du kan prøve den samme uordnede forespørgsel 100.000 gange og altid modtage den med den samme bestilling, og dermed komme til at tro, at du kan stole på nævnte bestilling. Men det ville være en fejl, for en dag vil noget ændre sig, og det vil ikke have den rækkefølge, du forventer. Et eksempel er, når en database opgraderes til en ny version af SQL Server - dette har fået mange forespørgsler til at ændre rækkefølgen. Men det behøver ikke at være så stor en ændring. Noget så lidt som at tilføje eller fjerne et indeks kan forårsage forskelle. Og mere:Installation af en servicepakke. Opdeling af et bord. Oprettelse af en indekseret visning, der inkluderer den pågældende tabel. At nå et vendepunkt, hvor en scanning er valgt i stedet for en søgning. Og så videre.

Stol ikke på, at resultaterne bliver bestilt, medmindre du har sagt "Server, ORDER BY ".




  1. hvordan man får det samlede antal rækker med mysqli

  2. SQL Query Where Column ='' returnerer Emoji-tegn 🎃 og 🍰

  3. Hvordan beder man javascript vente på, at mysql tildeler værdi til php-variabel?

  4. Rediger kolonne kontra skift kolonne