2013-05-06 13 views
6

Chcę użyć tabeli zmiennej zamiast tabeli tymczasowej, ale moja główna konstrukcja zapytania jest dynamiczna. Zapytanie dynamiczne jest w pojedynczym cudzysłowie, więc jak mogę pobrać dane z @ TableVariable. Nie chcę usuwać zapytania dynamicznego, ponieważ niektóre parametry zostaną dodane później.Używanie zmiennej tabeli w kwerendzie dynamicznej

np. Poniżej znajduje się kod błędu, w którym zapisałem zmienną tabeli w Zapytaniu dynamicznym ........

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

Pomóż mi w tym.

Dzięki z góry.

Odpowiedz

8

Spróbuj to:

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

dziękuję, w rzeczywistości to jest to samo, co chcę. – Anvesh

1

Musisz zawierać definicję zmiennej tabeli w zapytaniu dynamicznym. więc ostateczna zapytanie będzie jak

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 

Zmienna tabela nie jest dostępna poza dynamicznych zapytań SQL oświadczenie @SQL

+1

To nie działa przykro, – Anvesh

+0

próbowałeś swoją odpowiedź, nie można powiązać zmiennej tabeli w ten sposób. – Anvesh

+0

ok, pozwól mi sprawdzić –

4

Jako rozwiązanie alternatywne można zamiast wykorzystać #TempVehicles przechowywać ją w zmiennej.

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 

Spróbuj i sprawdź, czy spełnia twoje wymagania.

+0

Wspomniałem, że nie chcę używać tabeli temperatury, Niestety nie jest to akceptowana odpowiedź. – Anvesh

Powiązane problemy