복붙노트

[SQL] SQL 서버에 두 개의 서로 다른 서버에서 데이터 선택

SQL

SQL 서버에 두 개의 서로 다른 서버에서 데이터 선택

어떻게 SQL Server의 두 개의 서로 다른 서버에있는 두 개의 서로 다른 데이터베이스에서 동일한 쿼리에서 데이터를 선택할 수 있습니까?

해결법

  1. ==============================

    1.당신은 무엇을 서버 링크되어 찾고 있습니다. 당신은 개체 탐색기의 트리에서 다음 위치에서 SSMS에서 그들을 얻을 수 있습니다 :

    당신은 무엇을 서버 링크되어 찾고 있습니다. 당신은 개체 탐색기의 트리에서 다음 위치에서 SSMS에서 그들을 얻을 수 있습니다 :

    서버 개체 -> 연결된 서버

    또는 당신은 sp_addlinkedserver를 사용할 수 있습니다.

    당신은 하나를 설정해야합니다. 당신이이 있으면, 그렇게 같은 다른 서버에 테이블을 호출 할 수 있습니다 :

    select
        *
    from
        LocalTable,
        [OtherServerName].[OtherDB].[dbo].[OtherTable]
    

    소유자가 항상 DBO, 그래서 당신이 사용하는 어떤 스키마로 교체해야합니다되지 않습니다.

  2. ==============================

    2.당신은 연결된 서버를 사용 할 수 있습니다.

    당신은 연결된 서버를 사용 할 수 있습니다.

    일반적으로 링크 된 서버는 SQL 서버의 다른 인스턴스 또는 Oracle과 같은 다른 데이터베이스 제품에 테이블을 포함하는 Transact-SQL 문을 실행하는 데이터베이스 엔진을 사용하도록 구성되어 있습니다. 많은 종류의 OLE DB 데이터 소스 Microsoft Access 및 엑셀을 포함하여 연결된 서버로 구성 할 수 있습니다.

    링크 된 서버는 다음과 같은 이점을 제공합니다 :

    연결된 서버에 대해 더 읽어보십시오.

    여기에 연결된 서버를 만들기위한 간단한 튜토리얼입니다.

    또는

    당신은 쿼리를 사용하여 연결된 서버를 추가 할 수 있습니다.

    통사론:

    sp_addlinkedserver [ @server= ] 'server' [ , [ @srvproduct= ] 'product_name' ] 
         [ , [ @provider= ] 'provider_name' ]
         [ , [ @datasrc= ] 'data_source' ] 
         [ , [ @location= ] 'location' ] 
         [ , [ @provstr= ] 'provider_string' ] 
         [ , [ @catalog= ] 'catalog' ] 
    

    sp_addlinkedserver를에 대해 자세히 알아보십시오.

    한 번만 연결된 서버를 만들어야합니다. 다음과 같이 연결된 서버를 생성 한 후, 우리는 그것을 조회 할 수 있습니다 :

    select * from LinkedServerName.DatabaseName.OwnerName.TableName
    
  3. ==============================

    3.

    SELECT
            *
    FROM
            [SERVER2NAME].[THEDB].[THEOWNER].[THETABLE]
    

    또한 연결된 서버를 사용하여 볼 수 있습니다. 링크 서버는 DB2 플랫폼 너무 같은 다른 형식의 데이터 소스가 될 수 있습니다. 이것은 SQL 서버 TSQL 또는 SPROC 전화에서 액세스 DB2하려고하는 하나의 방법입니다 ...

  4. ==============================

    4.2 개의 다른 데이터베이스에서 쿼리하는 분산 쿼리입니다. 다음은 몇 가지 기술을 더한 장단점의 목록입니다 :

    2 개의 다른 데이터베이스에서 쿼리하는 분산 쿼리입니다. 다음은 몇 가지 기술을 더한 장단점의 목록입니다 :

  5. ==============================

    5.이 시도:

    이 시도:

    SELECT * FROM OPENROWSET('SQLNCLI', 'Server=YOUR SERVER;Trusted_Connection=yes;','SELECT * FROM Table1') AS a
    UNION
    SELECT * FROM OPENROWSET('SQLNCLI', 'Server=ANOTHER SERVER;Trusted_Connection=yes;','SELECT * FROM Table1') AS a
    
  6. ==============================

    6.이들은 모두 좋은 답변을하지만,이 하나가 누락 그것은 그 자체가 강력한 용도를 가지고있다. 아마도 그것은 OP 원하는 것을 적합하지 않지만, 문제는 모호하고 있었고, 난 다른 사람들이 여기에 그들의 방법을 찾을 수 있습니다 생각합니다. 기본적으로 여기 방법은 동시에 여러 서버에 대해 쿼리를 실행하려면 1 개 창을 사용할 수 있습니다 :

    이들은 모두 좋은 답변을하지만,이 하나가 누락 그것은 그 자체가 강력한 용도를 가지고있다. 아마도 그것은 OP 원하는 것을 적합하지 않지만, 문제는 모호하고 있었고, 난 다른 사람들이 여기에 그들의 방법을 찾을 수 있습니다 생각합니다. 기본적으로 여기 방법은 동시에 여러 서버에 대해 쿼리를 실행하려면 1 개 창을 사용할 수 있습니다 :

    에서 SSMS는 등록 된 서버를 열고 로컬 서버 그룹에서 새 서버 그룹을 만들 수 있습니다.

    이 그룹에서 당신이 질의하고자 각 서버에 대한 새 서버 등록을 만듭니다. DB를 이름이 다른 경우 속성의 각의 기본을 설정 확인합니다.

    이제 마우스 오른쪽 버튼을 클릭하고 새 쿼리를 선택, 첫 번째 단계에서 만든 그룹으로 돌아갑니다. 새 쿼리 창이 열립니다 당신이 실행되는 쿼리는 그룹의 각 서버에서 실행됩니다. 결과는 기록에서 온 서버 나타내는 여분의 열 이름을 가진 하나의 데이터 세트에 제시되어있다. 상태 표시 줄을 사용하는 경우 서버 이름이 여러으로 대체됩니다주의 할 것이다.

  7. ==============================

    7.나는 원격 서버에서 호스팅되는 SQL_server 2016에 SQL_server 2008을 연결하는 동일한 문제가 있었다. 다른 답변은 간단 나를 위해 일하지 않았다. 나는 그것이 다른 사람이 유용 할 수 있습니다 생각하는 나는 여기에 내 불통 솔루션을 작성합니다.

    나는 원격 서버에서 호스팅되는 SQL_server 2016에 SQL_server 2008을 연결하는 동일한 문제가 있었다. 다른 답변은 간단 나를 위해 일하지 않았다. 나는 그것이 다른 사람이 유용 할 수 있습니다 생각하는 나는 여기에 내 불통 솔루션을 작성합니다.

    원격 IP DB 연결을위한 확장 된 답 :

    1 단계 : 링크 서버

    EXEC sp_addlinkedserver @server='SRV_NAME',
       @srvproduct=N'',
       @provider=N'SQLNCLI',   
       @datasrc=N'aaa.bbb.ccc.ddd';
    
    EXEC sp_addlinkedsrvlogin 'SRV_NAME', 'false', NULL, 'your_remote_db_login_user', 'your_remote_db_login_password'
    

    ... SRV_NAME은 발명 이름입니다. 우리는 우리의 쿼리에서 원격 서버를 참조하는 데 사용합니다. aaa.bbb.ccc.ddd 형식은 SQLSERVER DB를 호스팅하는 원격 서버의 IP 주소입니다.

    2 단계 : 쿼리를 실행 예를 들어 :

    SELECT * FROM [SRV_NAME].your_remote_db_name.dbo.your_table
    

    ...그리고 그게 다야!

    구문 세부 정보 : sp_addlinkedserver를하고 sp_addlinkedsrvlogin을

  8. ==============================

    8.(당신이 SA는이 작업을 수행 할 필요가) 다른 하나 개의 서버에 연결된 서버 정의를 작성 후 단 4 부분으로 된 이름 (BOL 참조)을 참조합니다.

    (당신이 SA는이 작업을 수행 할 필요가) 다른 하나 개의 서버에 연결된 서버 정의를 작성 후 단 4 부분으로 된 이름 (BOL 참조)을 참조합니다.

  9. ==============================

    9.서버 2008 :

    서버 2008 :

    때 SSMS에서이 server1.DB1 시도에 연결 :

    SELECT  * FROM
    [server2].[DB2].[dbo].[table1]
    

    다른 사람이 언급 한 바와 같이, 서버가 연결되지 않기 때문에 그것의 작동하지 않는 경우.

    나는 오류가 발생합니다 :

    서버를 추가하려면 :

    참조 : sp_addlinkedserver를을 사용하여 서버를 추가하려면 링크 : [1] : sp_addlinkedserver를을 사용하여 서버를 추가하려면

    그냥 쿼리 무엇을 당신의 sys.servers에 참조하십시오 :

    SELECT * FROM [sys].[servers]
    
  10. ==============================

    10.

     select * 
     from [ServerName(IP)].[DatabaseName].[dbo].[TableName]
    
  11. ==============================

    11.Super9은 데이터 공급자와 SQL Server 인증을 사용 OPENDATASOURCE에 대해 이야기 @으로  SQLOLEDB . 난 그냥 하나 개의 테이블에 대한 코드는 코드가 실행되고있는 현재의 단절 데이터베이스에 있으며 '192.166.41.123'다른 서버에있는 다른 여기에 게시하고

    Super9은 데이터 공급자와 SQL Server 인증을 사용 OPENDATASOURCE에 대해 이야기 @으로  SQLOLEDB . 난 그냥 하나 개의 테이블에 대한 코드는 코드가 실행되고있는 현재의 단절 데이터베이스에 있으며 '192.166.41.123'다른 서버에있는 다른 여기에 게시하고

    SELECT top 2 * from dbo.tblHamdoonSoft  tbl1 inner JOIN  
    OpenDataSource('SQLOLEDB','Data Source=192.166.41.123;User ID=sa;Password=hamdoonsoft')
    .[TestDatabase].[dbo].[tblHamdoonSoft1] tbl2 on tbl1.id = tbl2.id
    
  12. ==============================

    12.

    sp_addlinkedserver('servername')
    

    그래서 그는 다음과 같이 가야한다 -

    select * from table1
    unionall
    select * from [server1].[database].[dbo].[table1]
    
  13. ==============================

    13.나는이 오래된 질문은 알고 있지만 나는 동의어를 사용합니다. 기발한 쿼리는 데이터베이스 서버 A에서 실행되고, 서버 A에 추가에 존재하지 않는 데이터베이스 서버 B의 테이블에 대한 외모는 서버 B에서 테이블을 호출하는 데이터베이스의 동의어 귀하의 질의에 없습니다 어떤 스키마 또는 다른 데이터베이스 이름을 포함, 단지 보통의 당 테이블 이름을 호출이 작동합니다.

    나는이 오래된 질문은 알고 있지만 나는 동의어를 사용합니다. 기발한 쿼리는 데이터베이스 서버 A에서 실행되고, 서버 A에 추가에 존재하지 않는 데이터베이스 서버 B의 테이블에 대한 외모는 서버 B에서 테이블을 호출하는 데이터베이스의 동의어 귀하의 질의에 없습니다 어떤 스키마 또는 다른 데이터베이스 이름을 포함, 단지 보통의 당 테이블 이름을 호출이 작동합니다.

    말 당 동의어 일종의 연결하는만큼 서버를 연결할 필요가 없습니다.

  14. ==============================

    14.서버 개체 ---> 연결된 서버 ---> 새 연결된 서버

    서버 개체 ---> 연결된 서버 ---> 새 연결된 서버

    SQL 서버 다른 서버에 연결된 서버 쓰기 서버 이름 또는 IP 주소에서 선택 보안에서 선택 (이 보안 컨텍스트를 사용하여 만들 수) 다른 서버에 대한 쓰기 로그인 및 비밀번호

    이제 연결 후 사용

    Select * from [server name or ip addresses ].databasename.dbo.tblname
    
  15. ==============================

    15.연결된 서버를 추가하기위한 단순화 된 솔루션

    연결된 서버를 추가하기위한 단순화 된 솔루션

    첫 번째 서버

    EXEC sp_addlinkedserver @server='ip,port\instancename'
    

    둘째 로그인

    EXEC sp_addlinkedsrvlogin 'ip,port\instancename', 'false', NULL, 'remote_db_loginname', 'remote_db_pass'
    

    로컬 DB에 링크에서 쿼리를 실행

    INSERT INTO Tbl (Col1, Col2, Col3)
    SELECT Col1, Col2, Col3
    FROM [ip,port\instancename].[linkedDBName].[linkedTblSchema].[linkedTblName]
    
  16. from https://stackoverflow.com/questions/1144051/selecting-data-from-two-different-servers-in-sql-server by cc-by-sa and MIT license