Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
来自参数的动态tSQL查询_Sql_Sql Server_Excel_Tsql_Dynamic Sql - Fatal编程技术网

来自参数的动态tSQL查询

来自参数的动态tSQL查询,sql,sql-server,excel,tsql,dynamic-sql,Sql,Sql Server,Excel,Tsql,Dynamic Sql,我正在努力使用tSQL中的动态查询来与Excel ODBC一起使用 SQL Server 2016通过用于SQL Server的ODBC驱动程序11 我找到了这篇文章,但它只使用存储在参数中的表名,我需要实际的表位于参数中: 这导致错误消息必须声明表变量“@t” 不幸的是,我不能使用临时表,因为连接器不支持临时表 我的原始查询要复杂得多,它包含6个不同的参数,所有参数都在查询的不同点注入,还有2个保存临时结果的表参数 提前感谢您只需要将表声明为查询的一部分。该表在该范围内声明和识别: decla

我正在努力使用tSQL中的动态查询来与Excel ODBC一起使用

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

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

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

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

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


提前感谢

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

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)
结果:


为什么它必须是一张桌子?看起来您想要使用一些变量,并且能够在JOIN子句中使用它们。
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)