Le variabili di tabella sono state create in memoria o in tempdb? Lo stesso vale per i tavoli temporanei brevi ?variabili di tabella create e mantenute in memoria o in tempdb?
risposta
una tabella temporanea sarà creata in tempdb e si può facilmente verificare la presenza di esso interrogando la tabella sysobjects in tempdb
esempio
create table #test (Item char(1), TimeSold varchar(20))
select * from tempdb.sys.sysobjects
where name like '#test%'
si dovrebbe vedere qualcosa con un nome come #test _______ 000,000,000,905 mila ma poi con più di sottolineatura
Se avete bisogno di controllare se una tabella temporanea esiste poi vedere anche How Do You Check If A Temporary Table Exists In SQL Server
La struttura della variabile Table viene anche creata in tempdb Per vedere la variabile table si potrebbe fare qualcosa del genere ma non è garantito che qualcuno non si sia introdotto di nascosto prima di creare la sua variabile table. Il nome della variabile tavolo sarà qualcosa di simile a # 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
Per maggiori informazioni vedi qui: http://support.microsoft.com/kb/305977
modificati la mia risposta, tx – SQLMenace
E 'stata la mia comprensione che, come minimo, la struttura di una variabile di tabella viene sempre creata in TempDB. Quindi, come pointed out by SQLMenace, i dati possono o non possono traboccare.
Per this Microsoft Knowledge Base Article:
Una variabile tabella non è una memoria di sola struttura. Poiché una variabile di tabella potrebbe contenere più dati di quanti possano essere contenuti nella memoria , è necessario che sul disco sia presente una posizione sul disco per memorizzare i dati. Le variabili di tabella sono create nel database tempdb simile a alle tabelle temporanee. Se è disponibile la memoria , vengono create sia le variabili di tabella che le tabelle temporanee e elaborate in memoria (dati cache).
I dati sono sempre conservati su pagine di dati che appartengono a 'tempdb'. Questi possono o non possono essere scritti su disco e se scritti su disco le pagine potrebbero o potrebbero non essere ancora nel pool di buffer. [Alcune dimostrazioni rilevanti alla fine della mia risposta qui] (http://dba.stackexchange.com/a/16386/3690) –
In MS SQL 2014 è stato introdotto un tipo speciale di variabili di tabella "Variabili di tabella ottimizzate per memoria". E non usano tempdb.
http://dba.stackexchange.com/questions/16385/whats-the-difference-between-a-temp-table-and-table-variable-in-sql-server –