program story

SQL Server 연결된 서버 예제 쿼리

inputbox 2020. 9. 13. 10:30
반응형

SQL Server 연결된 서버 예제 쿼리


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의 경우 table1from DB1table1from 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>

서버 이름을 []


참조의 일부로 스키마 / 소유자 (기본적으로 dbo)를 지정해야합니다. 또한 최신 (ANSI-92) 조인 스타일을 사용하는 것이 좋습니다.

select foo.id 
    from databaseserver1.db1.dbo.table1 foo
        inner join databaseserver2.db1.dbo.table1 bar 
            on foo.name = bar.name

이러한 다른 답변에 문제가있는 사람들을 위해 , 시도OPENQUERY

예:

 SELECT * FROM OPENQUERY([LinkedServer], 'select * from [DBName].[schema].[tablename]') 

select * from [Server].[database].[schema].[tablename] 

이것이 올바른 전화 방법입니다. 쿼리를 실행하기 전에 서버가 연결되어 있는지 확인하십시오!

연결된 서버 호출을 확인하려면 :

EXEC sys.sp_linkedservers 

select name from drsql01.test.dbo.employee
  • drslq01은 servernmae --linked serer입니다.
  • 테스트는 데이터베이스 이름입니다.
  • dbo는 스키마-기본 스키마입니다.
  • 직원은 테이블 이름입니다.

연결된 서버에 대한 쿼리 실행 방법을 이해하는 데 도움이 되었기를 바랍니다.


연결된 서버의 경우 SQL 서버의 임시 데이터베이스를 많이 사용하므로 일반적으로 직접 쿼리를 사용하지 마십시오. 첫 번째 단계에서 데이터는 임시 DB로 검색되고 필터링이 발생합니다. 이것에 대한 많은 스레드가 있습니다. SQL을 원본 연결된 서버로 전달한 다음 필터링 된 결과를 반환하므로 open OPENQUERY를 사용하는 것이 좋습니다.

SELECT *
FROM OPENQUERY(Linked_Server_Name , 'select * from TableName where ID = 500')

그만한 가치는 다음 구문이 가장 잘 작동한다는 것을 알았습니다.

[LINKED_SERVER]에서 * 선택 ... [표]

데이터베이스 이름을 사용하여 다른 사람의 작업 권장 사항을 얻을 수 없습니다. 또한이 데이터 소스에는 스키마가 없습니다.


테이블을 마우스 오른쪽 버튼으로 클릭하고 스크립트 테이블을 클릭하십시오.

여기에 이미지 설명 입력


다음 쿼리가 가장 잘 작동합니다.

이 쿼리를 시도하십시오.

SELECT * FROM OPENQUERY([LINKED_SERVER_NAME], 'SELECT * FROM [DATABASE_NAME].[SCHEMA].[TABLE_NAME]')

MySQL을 MS SQL에 연결하는 것은 매우 도움이됩니다.

참고 URL : https://stackoverflow.com/questions/4091960/sql-server-linked-server-example-query

반응형