CTE: CTE oznacza potoczne Stołowych. Został wprowadzony w SQL Server 2005. Służy do przechowywania wyniku złożonego zapytania podrzędnego na tymczasowych bazach. Jego życie jest ograniczone do bieżącego zapytania. Jest zdefiniowany za pomocą instrukcji WITH. Używano go głównie do wywoływania rekursywnego.
Przykład
;with myCTE as
(
select ParentLevel, ParentID, ChildID
from MHA
where ChildID = 1
UNION ALL
select MHA.ParentLevel, MHA.ParentID, MHA.ChildID
from MHA
inner join myCTE on MHA.ParentID = myCTE.ChildID
where MHA.ParentID <> 0
)
(błąd)
select top (5) * from myCTE
więc w powyższym przykładzie, mają tworzyć nazwę CTE jako myCTE, które mogą być stosowane tylko w powyższym zapytania (mogę nie używać strony myCTE poza powyższym zapytaniem)
TEMP: Służy również do przechowywania wyniku zapytania na tymczasowych bazach. Ale jego życie jest ograniczone do bieżącej sesji. Jest zdefiniowany za pomocą #. Nie obsługuje rekurencji.
przykład:
select * into #tempTable from MHA
podano zapytania Utworzono temp tabeli teraz można go używać tabeli temp z boku tego zapytania, ale z sesji. Zobacz poniżej
(bez błędu)
select top (5) * from #tempTable
Z witryny DBA [Jaka jest różnica między CTE i tabeli temp?] (Http://dba.stackexchange.com/q/13112/ 3690) –
Nie wiem zbyt wiele o różnicach w wydajności, ale cte pozwalają na proste zapętlenie i rekursję, tabele tymczasowe są przydatne, jeśli dane wyjściowe zapytania będą dostępne wielokrotnie, a ponowne uruchomienie byłoby stratą czasu. –
Są to różne rzeczy, a tak naprawdę to konie na kursy. Który z nich jest najlepszy, zależy od dokładnego scenariusza. Twoje pytanie jest nie mniej dwuznaczne niż "Jakie są zalety używania widoków zamiast tabel?". – GarethD