MS SQL Server如何在同一个查询中更改数据库名称?

时间:2014-11-13 12:56:45

标签: sql-server

我在远程位置有两个不同的数据库,我通过链接服务器使用,每当我搜索时,我需要通过传递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。

2 个答案:

答案 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;