2013-05-06 43 views
6

我想使用表變量而不是臨時表,但我的主查詢結構是動態的。 動態查詢使用單引號,因此如何從@TableVariable獲取數據。 我不想刪除動態查詢,因爲稍後會添加一些參數。如何在動態查詢中使用表變量

例如以下是錯誤代碼,我已將表變量寫入動態查詢........

/*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 

幫助我,在這裏。

在此先感謝。

回答

8

試試這個:

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

謝謝,實際上這和我想要的一樣。 – Anvesh 2013-05-06 07:39:04

1

您必須在動態查詢中包含表變量定義。所以最終的查詢將會像

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 

表變量不是動態SQL查詢語句@SQL外部訪問

+1

這不是工作對不起, – Anvesh 2013-05-06 06:39:34

+0

你嘗試過你的答案,你不能表變量綁定這樣。 – Anvesh 2013-05-06 06:43:24

+0

好吧,讓我檢查 – 2013-05-06 06:43:52

4

您也可以使用#TempVehicles,而不是將它存儲在變量的替代解決方案。

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 

請嘗試並檢查它是否符合您的要求。

+0

我提到我不想使用臨時表,對不起,這是不被接受的答案。 – Anvesh 2013-05-06 07:39:42