Was ist in SQL Server der Unterschied zwischen einer @ -Tabelle, einer # -Tabelle und einer ## -Tabelle?
sql-server
Craig Schwarze
quelle
quelle
Schau es dir an
quelle
#
und##
Tabellen sind tatsächliche Tabellen, die in der temporären Datenbank dargestellt werden. Diese Tabellen können Indizes und Statistiken enthalten und über Sprocs in einer Sitzung hinweg zugänglich sein (im Fall einer globalen temporären Tabelle ist sie sitzungsübergreifend verfügbar).Die @ Tabelle ist eine Tabellenvariable.
Für mehr: http://www.sqlteam.com/article/temporary-tables
quelle
Ich würde mich auf die Unterschiede zwischen #table und @table konzentrieren. ## table ist eine globale temporäre Tabelle, und für den Datensatz in über 10 Jahren mit SQL Server habe ich noch keinen gültigen Anwendungsfall gefunden. Ich bin sicher, dass einige existieren, aber die Natur des Objekts macht es meiner Meinung nach höchst unbrauchbar.
Die Antwort von @marc_s auf @whiner ist absolut wahr: Es ist ein weit verbreiteter Mythos, dass Tabellenvariablen immer im Speicher leben. Tatsächlich ist es durchaus üblich, dass eine Tabellenvariable auf die Festplatte wechselt und wie eine temporäre Tabelle funktioniert.
Wie auch immer, ich schlage vor, die Unterschiede zu lesen, indem Sie den von @Astander angegebenen Links folgen. Der größte Unterschied besteht in Einschränkungen, was Sie mit @ table-Variablen nicht tun können.
quelle
Erstellt eine Tabelle, die nur für diese VERBINDUNG sichtbar ist, und während dieser VERBINDUNG kann derselbe Benutzer, der eine andere Verbindung erstellt, die Tabelle #t der anderen Verbindung nicht sehen.
Erstellt eine temporäre Tabelle, die für andere Verbindungen sichtbar ist. Die Tabelle wird jedoch gelöscht, wenn die erstellende Verbindung beendet wird.
quelle
SqlConnection.Open()
mit der gleichen Verbindungszeichenfolge ist die gleiche Verbindung ?Wenn Sie eine eindeutige globale temporäre Tabelle benötigen, erstellen Sie eine eigene Tabelle mit einem eindeutigen Präfix / Suffix und löschen Sie die Post-Ausführung, wenn eine if-Objekt-ID (....). Der einzige Nachteil ist die Verwendung von Dynamic SQL und muss explizit gelöscht werden.
quelle