【问题标题】:How to use Table Variable in Dynamic Query如何在动态查询中使用表变量
【发布时间】:2013-06-19 21:32:44
【问题描述】:

我想使用 Table Variable 而不是 Temp Table 但我的主要查询构造是 Dynamic 。 动态查询是单引号,所以我如何从@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

帮帮我,在这。

提前致谢。

【问题讨论】:

    标签: sql sql-server


    【解决方案1】:

    试试这个:

    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;
    

    【讨论】:

      【解决方案2】:

      作为替代解决方案,您可以使用#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
      

      尝试检查它是否符合您的要求。

      【讨论】:

      • 我提到我不想使用临时表,对不起,这不是被接受的答案。
      猜你喜欢
      • 2015-09-02
      • 2021-09-05
      • 1970-01-01
      • 1970-01-01
      • 2018-05-14
      • 2018-04-06
      • 1970-01-01
      • 2014-09-21
      • 2012-02-16
      相关资源
      最近更新 更多