Mam dużą zmienną typu tabeli zdefiniowaną przez użytkownika, która ma 129 kolumn. Jednocześnie będę przechowywać około 2000-3000 rekordów w tej zmiennej tabeli i przekażę ją do różnych procedur przechowywanych i funkcji w celu uzyskania dodatkowych danych i wprowadzenia modyfikacji. Te dodatkowe dane i nowe modyfikacje zostaną następnie zapisane w nowej zmiennej tabeli tego samego typu i zwrócone do źródłowej procedury składowanej za pomocą OUTPUT
parametru. (Jest tak, ponieważ parametr typu tabeli można przekazać tylko jako READONLY
.)
To jest mój pseudo-kod:
SP1
@tmp tableType
{
INSERT @tmp EXEC
SP2 (@tmp)
INSERT @tmp EXEC
SP3 (@tmp)
}
Czy powinienem użyć @table_variable
lub #temp_table
?
sql-server
sql-server-2008
performance
Sreekumar P.
źródło
źródło
Odpowiedzi:
Są dwa blogi, na które powinieneś spojrzeć. Pierwszy ( tutaj ) to porównanie zmiennych tabel i tabel temp. Pochodzi z 2008 roku i pozostaje odpowiedni dla SQL Server 2008 R2.
Drugi wpis na blogu ( tutaj ) dotyczy niektórych nieporozumień (pominiętych koncepcji) dotyczących zmiennych tabel; w tym indeksowanie zmiennej tabeli.
Oba wpisy na blogu, artykuły, zostały napisane przez Gail Shaw.
Uważam, że jedną rzeczą, której szukasz, jest Zmienna tabeli, która nie może być przekazywana między procedurami przechowywanymi, podczas gdy Tabela temperatur może być przekazywana między procedurami przechowywanymi. Najbliższe przekazywanie zmiennych tabeli między procedurami przechowywanymi jest jako tabela zdefiniowana przez użytkownika.
Przekazanie zmiennej tabeli jako TVP do procedury składowanej wymaga, aby była zdefiniowana jako parametr TYLKO DO CZYTANIA. Oznacza to, że będzie wiele kopii Zmiennej tabeli, jeśli chcesz zwrócić jej zmodyfikowaną kopię.
Podsumowując, przekazywanie między procedurami przechowywanymi może być lepiej obsługiwane przez tabelę temperatur, gdy chcesz zwrócić przekazaną strukturę ze zaktualizowanymi wartościami.
źródło
Nie ma nic lepszego niż wypróbowanie obu, ale uważam, że #tempTables działa lepiej, gdy przejdziesz do setek rekordów.
źródło