我在远程位置有两个不同的数据库,我通过链接服务器使用,每当我搜索时,我需要通过传递id来查看它们。所以我使用以下两个查询。但我想通过将数据库名称作为变量传递来只使用一个。
select * from [LINKED_SERVER].db2_WorkDB.dbo.Tbl_Jobseeke with(nolock) where id = 12
select * from [LINKED_SERVER].db3_SalesDB.dbo.Tbl_Jobseeke with(nolock) where id = 12
为什么我可以为db name传递一个变量,这个变量允许我编写一个查询并且可以逐个使用db。
注意:我不想将查询用作字符串,而是将它传递给EXEC。
答案 0 :(得分:1)
你可以使用exec
,但这远不是很好......
DECLARE @tblName NVARCHAR(20)
SET @tblName = 'db2_WorkDB'
exec('SELECT * FROM [LINKED_SERVER].' + @tblName + '.dbo.Tbl_Jobseeke with (nolock) where id = 12')
我该怎么办?我使用了一个联盟:
select 'db2_WorkDB' as source, * from [LINKED_SERVER].db2_WorkDB.dbo.Tbl_Jobseeke with(nolock) where id = 12
union
select 'db3_SalesDB' as source, * from [LINKED_SERVER].db3_SalesDB.dbo.Tbl_Jobseeke with(nolock) where id = 12
如果要包含重复记录,请使用union all
。
答案 1 :(得分:1)
使用动态SQL
declare @dbname SYSNAME, @query as NVARCHAR(MAX);
SET @dbname = 'your db name';
SET @query = 'SELECT FROM [YOUR SERVER].' + @dbname + '.dbo.Tbl_Jobseeke with(nolock) where id = 12';
EXEC sp_executesql @query;