动态 tSQL 查询参数化

3

我在使用与Excel ODBC一起使用的tSQL动态查询方面遇到了困难。

通过ODBC Driver 11 for SQL Server连接到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个不同的参数,在查询的不同点进行注入,并且有2个包含临时结果的表参数。

提前感谢您的帮助。


为什么一定要用表格?看起来你想使用一些变量并能够在JOIN子句中使用它们。 - Salman A
1个回答

1

您只需要在查询中声明您的表。该表在该范围内被声明和识别:

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接