Management Studio에있는 동안 두 개의 연결된 서버간에 쿼리를 실행 / 조인하려고합니다. 연결된 db 서버를 사용하는 올바른 구문입니까?
select foo.id
from databaseserver1.db1.table1 foo,
databaseserver2.db1.table1 bar
where foo.name=bar.name
기본적으로 db.table 앞에 db 서버 이름을 입력합니까?
답변
형식은 다음과 같아야합니다.
<server>.<database>.<schema>.<table>
예 : DatabaseServer1.db1.dbo.table1
업데이트 : 나는 이것이 오래된 질문이고 내가 가진 대답이 정확하다는 것을 알고 있습니다. 그러나 나는 이것에 걸려 넘어지는 다른 사람은 몇 가지를 알아야한다고 생각합니다.
즉, 조인 상황에서 연결된 서버에 대해 쿼리 할 때 연결된 서버의 ENTIRE 테이블 이 조인 작업을 수행하기 위해 쿼리가 실행되는 서버로 다운로드 될 가능성 이 높습니다 . OP의 경우, table1
from DB1
과 table1
from DB2
은 모두 쿼리를 실행하는 서버 (아마도 DB3
.
당신이 큰 테이블이있는 경우,이 있습니다 실행하는 데 시간이 오래 걸리는 작업이 발생할. 결국 그것은 이제 메모리 또는 심지어 디스크 전송 속도보다 훨씬 느린 네트워크 트래픽 속도에 의해 제한됩니다.
가능하면 로컬 테이블에 조인하지 않고 원격 서버에 대해 단일 쿼리를 수행하여 필요한 데이터를 임시 테이블로 가져옵니다. 그런 다음 그것을 쿼리하십시오.
이것이 가능하지 않다면 SQL 서버가 전체 테이블을 로컬로로드해야하는 다양한 사항을 살펴 봐야합니다. 예를 들어 GETDATE()
또는 특정 조인을 사용 합니다. 다른 성능 킬러에는 적절한 권리를 제공하지 않는 것이 포함됩니다.
자세한 내용은 http://thomaslarock.com/2013/05/top-3-performance-killers-for-linked-server-queries/ 를 참조하십시오 .
답변
SELECT * FROM OPENQUERY([SERVER_NAME], 'SELECT * FROM DATABASE_NAME..TABLENAME')
이것은 당신을 도울 수 있습니다.
답변
여전히 문제가있는 경우 <server>.<database>.<schema>.<table>
서버 이름을 []
답변
이러한 다른 답변에 문제가있는 사람들을 위해 , 시도OPENQUERY
예:
SELECT * FROM OPENQUERY([LinkedServer], 'select * from [DBName].[schema].[tablename]')
답변
참조의 일부로 스키마 / 소유자 (기본적으로 dbo)를 지정해야합니다. 또한 최신 (ANSI-92) 조인 스타일을 사용하는 것이 좋습니다.
select foo.id
from databaseserver1.db1.dbo.table1 foo
inner join databaseserver2.db1.dbo.table1 bar
on foo.name = bar.name
답변
select * from [Server].[database].[schema].[tablename]
이것이 올바른 전화 방법입니다. 쿼리를 실행하기 전에 서버가 연결되어 있는지 확인하십시오!
연결된 서버 호출을 확인하려면 :
EXEC sys.sp_linkedservers
답변
select name from drsql01.test.dbo.employee
- drslq01은 servernmae –linked serer입니다.
- 테스트는 데이터베이스 이름입니다.
- dbo는 스키마-기본 스키마입니다.
- 직원은 테이블 이름입니다.
연결된 서버에 대한 쿼리 실행 방법을 이해하는 데 도움이 되었기를 바랍니다.