Sql server 在表调用中插入变量

Sql server 在表调用中插入变量,sql-server,sql-server-2016,Sql Server,Sql Server 2016,我声明了一个变量 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的同时做到这一点,您有什么想法吗?您不能使用参数作为对象名。您需要创建all动态代码并执行它 例如: declare

我声明了一个变量

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的同时做到这一点,您有什么想法吗?

您不能使用参数作为对象名。您需要创建all动态代码并执行它

例如:

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

不能将参数用作对象名称。您需要创建all动态代码并执行它

例如:

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

您需要使用动态sql,如下所示:

declare @query varchar(max)
declare @DB varchar(99)='Table2017'

select @query = ' select * from ' +  @DB + '.dbo.Table3'
exec sp_executesql @query

您需要使用动态sql,如下所示:

declare @query varchar(max)
declare @DB varchar(99)='Table2017'

select @query = ' select * from ' +  @DB + '.dbo.Table3'
exec sp_executesql @query

使用
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 

使用
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 


尝试使整个语句动态,而不仅仅是数据库引用。尝试使整个语句动态,而不仅仅是数据库引用。为什么不
sp_executesql
?请根据我的知识,在这种情况下两者是相同的。不,请阅读链接中的页面。“sp_executesql允许语句参数化”感谢这篇文章,答案已经更新。为什么不
sp_executesql
?请根据我的知识,在这种情况下两者是相同的。不,请阅读链接中的页面。“sp_executesql允许语句参数化”感谢这篇文章,答案已经更新。为什么不
sp_executesql
?为什么不
sp_executesql
?请OP说“尝试在连接中使用此变量”这是想法,OP可以为他的查询进行修改,因为OP没有按照OP的意思提供其他表和连接详细信息?@KannanKandasamy OP指原始PosterOP说“尝试在连接中使用此变量”这是想法,OP可以为他的查询进行修改,因为OP没有提供其他表格和连接细节,OP的意思是什么?@KannanKandasamy OP指的是原始海报