Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Неочаквани резултати от CTE

Няма нищо неочаквано в този резултат, освен може би ако не го разбирате.

Всеки CTE се разрешава each and every time той е рефериран. Да, ето защо е възможно прост CTE на високо транзакционна таблица да върне 4 реда в една справка и 5 реда в следващите 2 нива надолу.

Във вашата проба обаче това се дължи на ORDER BY NEWID(), даващ на всяка резолюция на оригиналния CTE различен row_number()-ing. Мислехте ли, че CTE се съхраняват в паметта и се кешират? На сайта SQLFiddle под вашите резултати има връзка „преглед на плана за изпълнение“. Показва 2 отделни, отделни сканирания на масата .




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Внедряване на инкрементално натоварване с помощта на заснемане на промяна на данни в SQL Server

  2. Получаване на дати между диапазон от дати

  3. Използване на вложено използване в C# и SQL Server

  4. Алтернатива за оператор MAX върху битови полета

  5. Автоматизирайте заданията за архивиране и поддръжка с помощта на план за поддръжка в SQL Server