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指的是原始海报