2013-05-06 16 views
6

Desidero utilizzare la variabile di tabella anziché la tabella temporanea, ma la mia struttura di query principale è dinamica. La query dinamica è in virgolette singole, quindi come posso recuperare i dati da @TableVariable. Non voglio rimuovere la query dinamica perché alcuni parametri verranno aggiunti in seguito.Come utilizzare la variabile di tabella nella query dinamica

ad es. segue è il codice di errore, dove ho scritto la variabile di tabella in Dynamic Query ........

/*Declare Table Variable*/ 
DECLARE @TempVehicles TABLE 
    (
     [VehicleID] INT 
    ) 
/*Insert data into Table Variable*/ 
INSERT INTO @TempVehicles 
(
    [VehicleID] 
) 
SELECT VehicleID 
FROM tbl_Vehicles 

/*Dynamic Query and Main SQL Construction*/ 
DECLARE @SQL NVARCHAR(MAX) 
SET @SQL ='SELECT Cust_ID,A.VehicleID,GISInfo 
      FROM @TempVehicles A INNER JOIN tbl_GISData B ON A.VehicleID=B.VehicleID' 

EXECUTE SP_EXECUTESQL @SQL 

Aiutami, in questo.

Grazie in anticipo.

risposta

8

Try This:

CREATE TYPE IntegerTableType AS TABLE (ID INT); 
go 

DECLARE @TempVehicles IntegerTableType; 

INSERT @TempVehicles 
values (1); 





DECLARE @SQL NVARCHAR(MAX); 
SET @SQL ='SELECT * 
      FROM @TempVehicles;'; 


EXECUTE SP_EXECUTESQL @SQL,N'@TempVehicles IntegerTableType READONLY', 
@TempVehicles; 
+0

grazie, in realtà questo è lo stesso che voglio. – Anvesh

1

È necessario contenere la definizione della variabile di tabella all'interno della query dinamica. così query finale sarebbe come

DECLARE @SQL NVARCHAR(MAX) 

SET @SQL = 'DECLARE @TempVehicles TABLE(VehicleID INT) ' 
SET @SQL = @SQL + 'INSERT INTO @TempVehicles([VehicleID]) SELECT VehicleID FROM tbl_Vehicles ' 
SET @SQL = @SQL + 'SELECT Cust_ID,A.VehicleID,GISInfo 
      FROM @TempVehicles A INNER JOIN tbl_GISData B ON A.VehicleID=B.VehicleID' 

EXECUTE SP_EXECUTESQL @SQL 

La variabile tabella non è accessibile all'esterno del dinamico query SQL dichiarazione @SQL

+1

Questo non funziona dispiace, – Anvesh

+0

Hai provato la tua risposta, non puoi associare variabile tavolo come questo. – Anvesh

+0

ok fammi controllare –

4

Come soluzione alternativa è possibile utilizzare #TempVehicles invece di memorizzare nella variabile.

SELECT VehicleID 
    into #TempVehicles 
FROM tbl_Vehicles 

/*Dynamic Query and Main SQL Construction*/ 
DECLARE @SQL NVARCHAR(MAX) 
SET @SQL ='SELECT Cust_ID,A.VehicleID, GISInfo 
      FROM #TempVehicles A INNER JOIN tbl_GISData B ON A.VehicleID=B.VehicleID; 
      Drop Table #TempVehicles' 

EXECUTE SP_EXECUTESQL @SQL 

Verificare e verificare se soddisfa le vostre esigenze.

+0

Ho detto che non voglio usare Temp Table, Spiacente, questa non è una risposta accettata. – Anvesh

Problemi correlati