我宣布了一个变量
DECLARE @DB varchar(99)='Table2017'
我正在尝试在数据库对象的连接中使用此变量:
Join @DB.dbo.Table3 U on A.ID = U.AccountID
使用'+ @DB +'.dbo.Table3
语法不正确以及'@DB'.dbo.Table3
和'+@DB+'.dbo.Table3
。关于如何在保持@DB引用为varchar的同时做到这一点的任何想法?
答案 0 :(得分:1)
您不能将参数用作对象名称。您需要创建所有代码动态并执行它。
例如:
declare @sqlt nvarchar(max)
DECLARE @DB varchar(99)='Table2017'
set @sqlt = 'select * from ' + @DB + '.dbo.Table3 U left join U on A.ID = U.AccountID'
exec sp_executesql @sqlt
答案 1 :(得分:1)
使用sp_executesql
作为下一个演示: -
DECLARE
@FirstTable varchar(99)='Table1',
@SecondTable varchar(99)='Table2',
@MyQuery nvarchar(200) =
'SELECT column_name(s)
FROM ' + @FirstTable + '
INNER JOIN ' + @SecondTable +
' ON '+ @FirstTable +'.column_name = '+ @SecondTable +'.column_name'
exec sp_executesql @MyQuery
答案 2 :(得分:0)
你需要使用动态sql,如下所示:
declare @query varchar(max)
declare @DB varchar(99)='Table2017'
select @query = ' select * from ' + @DB + '.dbo.Table3'
exec sp_executesql @query