2013-05-06 4 views
6

Я хочу использовать переменную таблицы вместо таблицы Temp, но моя основная конструкция запроса - динамическая. Динамический запрос в одинарной кавычки, так как я могу получить данные из @TableVariable. Я не хочу удалять динамический запрос, потому что некоторые параметры будут добавлены позже.Как использовать переменную таблицы в динамическом запросе

например. следующий код ошибки, где я написал переменную таблицы в 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 

Помогите мне в этом.

Спасибо заранее.

ответ

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

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

+0

вы пробовали свой ответ, вы не можете связать переменную таблицы, как это. – Anvesh

+0

ok позвольте мне проверить –

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

Я упомянул, что я не хочу использовать Temp Table, Извините, это не принятый ответ. – Anvesh

Смежные вопросы