@table_variable o #temp_table


11

Ho una grande variabile di tipo tabella definita dall'utente che ha 129 colonne. Conserverò circa 2000-3000 record in questa variabile di tabella alla volta e li passerò a varie procedure e funzioni memorizzate per ottenere dati aggiuntivi e apportare modifiche. Questi dati aggiuntivi e le nuove modifiche verranno quindi archiviati in una nuova variabile di tabella dello stesso tipo e restituiti alla procedura memorizzata di origine tramite un OUTPUTparametro. (Questo perché un parametro del tipo di tabella può essere passato solo come READONLY.)

Questo è il mio pseudo-codice:

  SP1
  @tmp tableType
  {
        INSERT @tmp EXEC
        SP2 (@tmp)

        INSERT @tmp EXEC
        SP3 (@tmp)
  }

Dovrei usare un @table_variableo #temp_table?


Risposte:


12

Ci sono due blog che dovresti guardare. Il primo ( qui ) è un confronto tra variabili di tabella e tabelle temporanee. È del 2008 e rimane rilevante per SQL Server 2008 R2.

Il secondo post del blog ( qui ) tratta alcune delle idee sbagliate (mancate concezioni) relative alle variabili di tabella; inclusa l'indicizzazione di una variabile di tabella.

Entrambi questi articoli del blog, articoli, sono scritti da Gail Shaw.

Credo che l'unico elemento che stai cercando sia una variabile di tabella che potrebbe non essere passata tra le procedure memorizzate mentre una tabella temporanea è in grado di passare tra le procedure memorizzate. Il più vicino al quale una variabile di tabella passa tra le stored procedure è come un tipo di tabella definito dall'utente.

Il passaggio di una variabile di tabella come TVP a una procedura memorizzata ha il requisito che deve essere definito come parametro SOLO LETTURA. Ciò implica che ci saranno più copie della variabile tabella se si desidera restituirne una copia modificata.

Tutto sommato, il passaggio tra le stored procedure potrebbe essere meglio servito da una tabella temporanea quando si desidera restituire la struttura passata con valori aggiornati.


5

Niente di meglio che provare entrambi, ma trovo che #tempTables funzioni meglio una volta entrati nelle centinaia di record.


3
Aggiungete a ciò il fatto che le tabelle temporanee possono avere indici, avere statistiche, mentre le variabili di tabella possono avere solo un PK. Hai alcuni dettagli qui .
Marian,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.