2014-11-13 2 views
0

나는 연결된 서버를 통해 사용하는 원격 위치에 두 개의 서로 다른 데이터베이스가 있는데, 검색 할 때마다 ID를 전달하여이 둘을 모두 볼 필요가있다. 그래서 나는 다음 두 쿼리를 사용하고 있습니다. 하지만 난 하나의 변수로 DB 이름을 전달하여 사용자 싶습니다.MS SQL Server 동일한 쿼리에서 데이터베이스 이름을 변경하는 방법은 무엇입니까?

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에 전달합니다.

답변

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을 사용하십시오.

+0

, 예 1 : 내 쿼리 문자열로 전체 쿼리를 변환 한 다음에 전달할 수없는 많은 다른 변수가 너무 큰 exec, 예제 2 : 여기에도 동일한 쿼리가 2 번 사용됩니다. 단지 데이터베이스 이름이 변경됩니다. –

+0

글쎄, 당신도 똑같이해야합니다. 서로 다른 매개 변수를 사용하여 동일한 쿼리를 두 번 호출하는 것입니다. 차이점이 뭐야? –

+0

질문에 나는 견인 쿼리를 제공하여 사용자에게 단일 쿼리로 db 이름을 변경해야한다고 설명했습니다. –

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; 
관련 문제