Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Nieoczekiwane wyniki CTE

Nie ma nic nieoczekiwanego w tym wyniku, chyba że go nie rozumiesz.

Każde CTE jest rozwiązywane each and every time jest przywoływany. Tak, dlatego proste CTE na wysoce transakcyjnej tabeli może zwrócić 4 wiersze w jednym odwołaniu i 5 wierszy na kolejnych 2 poziomach w dół.

Jednak w twoim przykładzie jest to spowodowane funkcją ORDER BY NEWID(), która nadaje każdej rozdzielczości oryginalnego CTE inny numer_wiersza(). Czy uważasz, że CTE są przechowywane w pamięci i buforowane? W witrynie SQLFiddle, pod Twoimi wynikami, znajduje się link „wyświetl plan wykonania”. Pokazuje 2 odrębne, oddzielne skany tabeli .




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Aktualizacja 4 milionów rekordów na serwerze SQL przy użyciu listy identyfikatorów rekordów jako danych wejściowych

  2. Usuń węzeł xml z kolumny tabeli SQL Server 2008 r2 na podstawie wartości atrybutu

  3. Jak przekształcić dane z wierszy na podstawie określonej kolumny do innej struktury danych

  4. Minimalnie zalogowany Wstaw do

  5. Po usunięciu kaskady dla tabeli samoodnoszącej się