代码之家  ›  专栏  ›  技术社区  ›  Jonas Helium

来自参数的动态tSQL查询

  •  3
  • Jonas Helium  · 技术社区  · 8 年前

    我正在努力解决tSQL中用于Excel ODBC的动态查询问题。

    SQL Server 2016,通过用于SQL Server的ODBC驱动程序11

    我找到了这篇文章,但它只使用存储在参数中的表名,我需要实际的表位于参数中: Simple dynamic TSQL query syntax

    declare @t table(value1 int, value2 nvarchar(1024))
    insert @t SELECT 1 as value1, 'test' as value2
    declare @where nvarchar(max)
    declare @query nvarchar(max)
    declare @sql nvarchar(max)
    set @where = ' WHERE value1 = 1'
    set @query = 'Select * from @t'
    set @sql = @query + @where
    EXEC(@sql)
    

    这将导致错误消息 必须声明表变量“@t”

    不幸的是,我不能使用临时表,因为连接器不支持临时表。

    我的原始查询要复杂得多,它包含6个不同的参数,所有参数都在查询的不同点注入,还有2个保存临时结果的表参数

    提前感谢

    1 回复  |  直到 8 年前
        1
  •  1
  •   Rigerta    8 年前

    您只需要将表声明为查询的一部分。该表在该范围内声明和识别:

    declare @t table(value1 int, value2 nvarchar(1024))
    insert @t select 1 as value1, 'test' as value2
    declare @where nvarchar(max)
    declare @query nvarchar(max)
    declare @sql nvarchar(max)
    set @where = ' where value1 = 1'
    set @query = 'declare @t table(value1 int, value2 nvarchar(1024)) 
                  insert @t select 1 as value1, ''test'' as value2 
                  select * from @t'
    set @sql = @query + @where
    exec(@sql)
    

    结果:

    enter image description here