2010-08-11 2 views
0

동일한 서버의 다른 데이터베이스에서 데이터를 가져 오는 저장 프로 시저가 있습니다.SQL Server 2005를 사용하여 다른 데이터베이스의 데이터를 쿼리하는 더 이상적인 방법이 있습니까?

사용할 데이터베이스를 하드 코딩하지 않고 대신 구성 할 수 있습니다. 이것은 동적 SQL없이 가능합니까?

내가 지금까지 생각해 낼 수있는 최상의 솔루션은 동적 SQL을 사용하여 일련의 뷰를 생성하는 저장 프로 시저를 먼저 실행하는 것입니다. 그런 다음이 뷰에서 데이터를 선택하여 동적 SQL을 사용하지 않아도됩니다.

예 :

DECLARE 
    @databaseName nvarchar(max), 
    @sql   nvarchar(max) 

-- Get this value from a configuration table 
SET @databaseName = 'TestDatabase' 

IF EXISTS(SELECT NULL FROM dbo.SysObjects WHERE [Name] = 'TestView') 
    DROP VIEW dbo.TestView 

SET @sql = 'CREATE VIEW dbo.TestView AS SELECT * FROM ' + @databaseName +'.dbo.TestTable' 

EXEC (@sql) 

--I can now select from TestView using regular query. 

내가 이것에 대해 잘못된 길을 갈거야 같은데요. 이 작업을 수행하는 더 좋은 방법이 있습니까?

+0

왜, 작품 위의 코드는, 당신이 그것을 피하고 싶은 경우? 그것은 당신의 일이 아니지만 SSIS에 대해 들어 보셨습니까? – Tobiasopdenbrouw

+0

Tobiasopdenbrouw, SSIS 패키지를 사용하여 테이블의 값을 기반으로 다른 데이터베이스를 사용할 수 있습니까? –

답변

1

당신은 사용할 수 있습니다

OPENQUERY 또는 OPENROWSET

+0

감사합니다. 두 옵션 모두 매우 흥미 롭습니다.하지만 SQL 문자열을 작성하는 데 여전히 의존합니다. –

+0

그런 다음에 왜 반대 하시는지 말씀해주십시오. – Tobiasopdenbrouw

+1

버그는 동적 SQL을 사용하여 더 쉽게 소개되고 디버그하기가 더 쉽습니다. SQL 문자열에 무작위로 저장된 proc을 작성할 수 있으며, 실행하려고 할 때까지는 알지 못합니다. –

관련 문제