我正在努力解决 tSQL 中与 Excel ODBC 一起使用的动态查询问题。
通过适用于 SQL Server 的 ODBC 驱动程序 11 的 SQL Server 2016
我找到了这篇文章,但它仅使用存储在参数中的表名称,我需要实际的表位于参数内: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 个不同的参数,所有这些参数都在不同的点注入(inject)到查询中,以及 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)
结果:
关于sql - 从参数动态 SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48708414/