2011-03-14 3 views
1

그래서 나는 SQL 서버를 실행하고 두 데이터베이스를 가지고, 첫 번째 데이터베이스는 두 번째 데이터베이스의 이름을 저장합니다.다른 데이터베이스의 값을 기반으로 데이터베이스에 액세스하려면 어떻게해야합니까? (TSQL)

내가 장난 한

select * from [select database_name from table1].table 

(이것은 첫 번째 데이터베이스에서 쿼리입니다) : 첫 번째 데이터베이스에서 나는의 라인을 따라 뭔가를 두 번째 테이블의 데이터를 수정하는 문을 만들려면 sys와 키워드는 내가 이것을 할 수 있었는지 알아 내려고했지만 운이 없었다. 어떤 도움을 주시면 감사하겠습니다.

+0

코드, XML 또는 데이터 샘플을 게시하는 경우 텍스트 편집기에서 해당 행을 강조 표시하고 편집기 툴바에서 "코드 샘플"단추 ('{}) '를 클릭하여 멋지게 형식을 지정하고 구문을 강조 표시하십시오! –

답변

1

문자열을 작성하고 동적 SQL로 실행해야합니다. 참조 : The Curse and Blessings of Dynamic SQL

declare @database_name sysname 

select @database_name = database_name from Table1 

declare @sql nvarchar(1000) 

set @sql = N'select * from ' + @database_name + N'.SchemaName.TableName' 

exec sp_executesql @sql 
+0

참고해 주셔서 감사합니다! 제목을 사랑해 : –

0

은 당신이 할 수있는 경우에만이 같은 동적 쿼리를 실행하여 :

DECLARE @base varchar(30) 
SELECT @base = "yourOtherBase" 
EXECUTE ("select * from " + @base + "..table"); 
+0

정보 주셔서 감사합니다 이것은 완벽하게 일했습니다! –

0

한 가지 방법은 몇 가지 동적 SQL을 설정하는 것입니다의 라인을 따라 :

DECLARE @Command varchar(1000) 

SELECT @Command = replace('select * from <TargetDB>.dbo.table', '<TargetDB>', tabel1.database_name) 
from table1 
where [your criteria here] 

EXECUTE (@Command) 

또 다른 방법은 "대상"데이터베이스를 참조하는보기 (또는 동의어 또는 연결된 서버 정의)를 작성하는 것입니다.

DECLARE @Command varchar(1000) 

SELECT @Command = replace('CREATE VIEW SomeView AS select * from <TargetDB>.dbo.table', '<TargetDB>', tabel1.database_name) 
from table1 
where [your criteria here] 

EXECUTE (@Command) 

이렇게하면 영구 (즉, 동적이지 않은) 코드에서 참조 할 수있는보기가 만들어집니다. targe 데이터베이스가 자주 변경되거나 많은 수의 대상 데이터베이스가있는 경우 이렇게하면 작동하지 않습니다.

솔직히 진정한 대답은 아니오,이 작업을 전혀 수행 할 수 없다는 것이고,이 작업을 수행해야하는 상황을 피하기 위해 최선을 다해야합니다. 이 하나에 나를 믿어, 그것은 디버깅 및 유지 보수 악몽이 될 수 있습니다.

+0

@Joe가 맞습니다. 이렇게하면'sp_executeSQL'을 사용하십시오. –

관련 문제