Sql server 在SELECT FROM循环中传递变量

Sql server 在SELECT FROM循环中传递变量,sql-server,variables,while-loop,fetch,Sql Server,Variables,While Loop,Fetch,我希望从多个表MainTbl中进行选择,但它将基于要提取的表的结果集StateTbl 主表dbo.TABLE_MO、dbo.TABLE_CA、dbo.TABLE_AL、dbo.TABLE_MI 仅希望基于resultset StateTbl MO、CA、WA进行拉取 您可以利用dynamic和StateTbl来构建动态sql,而不是循环。像这样的 declare @SQL nvarchar(max) = '' select 'select * from TABLE_' + [State] +

我希望从多个表MainTbl中进行选择,但它将基于要提取的表的结果集StateTbl

主表dbo.TABLE_MO、dbo.TABLE_CA、dbo.TABLE_AL、dbo.TABLE_MI

仅希望基于resultset StateTbl MO、CA、WA进行拉取


您可以利用dynamic和StateTbl来构建动态sql,而不是循环。像这样的

declare @SQL nvarchar(max) = ''

select 'select * from TABLE_' + [State] + ' UNION ALL '
from StateTbl

select @SQL = left(@SQL, len(@SQL) - 10)

select @SQL
--uncomment the line below when you satisfied the dynamic sql is written the way you want it.
--exec sp_executesql @SQL

怎么样EXEC@SQL应该从表中选择吗@SQL将只包含表的名称。您不应该执行SET@SQL='SELECT*FROM dbo.TABLE_'+@State+''吗?可能重复:您不需要为此执行循环。我收到错误消息537,Level 16,State 5,Line 6传递给LEFT或SUBSTRING函数的长度参数无效。查询是否返回任何行?我写得非常快,并没有真正测试它。如果没有返回行,它肯定会返回该错误。它返回行。现在,我已经将其转换为存储过程,并在执行后进行插入。无论如何,从硬代码中打开最后一个变量“AAB”,并使用选择列表。它仍然需要逐个记录运行。插入RateMeasComp EXEC spMeasRateFlo'2','AAB'无意冒犯,但如果您一直在痛苦地插入RBAR行,则说明您做错了什么。插入内容应基于设置。也许你不需要这个程序谢谢Sean。有没有其他更好的方法通过SQL实现这一点?我唯一的另一个选择是SSIS路由和foreach循环,但我试图用SQL来处理它,因此我开始使用循环路由。
declare @SQL nvarchar(max) = ''

select 'select * from TABLE_' + [State] + ' UNION ALL '
from StateTbl

select @SQL = left(@SQL, len(@SQL) - 10)

select @SQL
--uncomment the line below when you satisfied the dynamic sql is written the way you want it.
--exec sp_executesql @SQL