T-SQL Table Variables with Dynamic SQL

All’interno di Store Procedure, può essere utile avere delle tabelle di appoggio in memoria. SQL Server mette a disposizione le Table Variable, variabili “tabella” che memorizzano record:

DECLARE @MyTable TABLE
(
 ProductID int UNIQUE,
 Price money CHECK(Price < 10.0)
)

(1) E’ necessario dichiarare la tabella all’interno dell’ SQL dinamico:Vanno seguite delle accortezze quando si combina l’uso di Table Variable e Dynamic Sql:

set @SQLQuery = '
  DECLARE @ProductTotals TABLE (   ProductID int,   Revenue money )
  INSERT INTO @ProductTotals (ProductID , Revenue ) 
  select ID, Revenue from myRealTable
  UPDATE OtherRealTable 
  set [Tipo Articolo]=tipo 
  from @ProductTotals  where OtherRealTable.ID > [@ProductTotals].ProductID '
 if @debug=1 
  print @SQLQuery 
else 
 exec sp_executesql @SQLQuery

(2) Quando si usa la Table Variable in una clausola di selezione attenzione alla sintassi da usare:

  1. OK: delete from @ProductTotals     where ProductID = 1
    OK: delete from @ProductTotals     where [@ProductTotals].ProductID = 1 
    KO: delete from @ProductTotals     where @ProductTotals.ProductID = 1