Werden Tabellenvariablen im Speicher oder in der tempdb erstellt? Dasselbe gilt für kurze temporäre Tabellen?
Antworten
Zu viele Anzeigen?Es wird eine temporäre Tabelle in tempdb erstellt, die Sie leicht überprüfen können, indem Sie die Tabelle sysobjects in tempdb abfragen
Beispiel
create table #test (Item char(1), TimeSold varchar(20))
select * from tempdb.sys.sysobjects
where name like '#test%'
sollten Sie etwas mit einem Namen wie #test_______000000000905 sehen, dann aber mit mehr Unterstrichen
Wenn Sie prüfen müssen, ob eine temporäre Tabelle existiert, lesen Sie auch Wie prüft man, ob eine temporäre Tabelle in SQL Server vorhanden ist?
Die Struktur der Tabellenvariable wird ebenfalls in tempdb erstellt. Um die Tabellenvariable zu sehen, könnten Sie so vorgehen, aber es gibt keine Garantie, dass sich nicht jemand vor Ihnen eingeschlichen hat, als er seine Tabellenvariable erstellte. Der Name der Tabellenvariable lautet etwa #7BB1235D
declare @v table(id int)
select top 1 * from tempdb.sys.sysobjects
where name like '#%'
and name not like '%[_]%'
order by crdate desc
select * from @v
Für weitere Informationen siehe hier: http://support.microsoft.com/kb/305977
Nach meinem Verständnis wird zumindest die Struktur einer Tabellenvariablen immer in TempDB erstellt. Dann, wenn von SQLMenace aufgezeigt können die Daten überschwappen oder auch nicht.
Per dieser Microsoft Knowledge Base Artikel :
Eine Tabellenvariable ist kein reiner Speicher Struktur. Da eine Tabellenvariable mehr Daten enthalten kann, als in den Speicher passen Speicher passt, muss sie einen Platz auf der Festplatte haben um Daten zu speichern. Tabellenvariablen werden in der tempdb-Datenbank erstellt, ähnlich wie wie temporäre Tabellen. Wenn Speicher verfügbar ist, werden sowohl Tabellenvariablen als auch temporäre Tabellen erstellt und im Speicher verarbeitet (Daten Zwischenspeicher).