답변:
찾고있는 것은 연결된 서버입니다. 개체 탐색기 트리의 다음 위치에서 SSMS로 가져올 수 있습니다.
Server Objects-->Linked Servers
또는 sp_addlinkedserver 를 사용할 수 있습니다 .
하나만 설정하면됩니다. 그런 다음 다른 서버에서 다음과 같이 테이블을 호출 할 수 있습니다.
select
*
from
LocalTable,
[OtherServerName].[OtherDB].[dbo].[OtherTable]
소유자가 항상 그런 것은 아니므로 dbo
사용하는 스키마로 바꾸십시오.
[OtherServerName].[OtherDB]..[OtherTable]
알려진 경우 포함하는 것이 가장 좋습니다.
연결된 서버를 사용하여 수행 할 수 있습니다.
일반적으로 연결된 서버는 데이터베이스 엔진이 다른 SQL Server 인스턴스 또는 Oracle과 같은 다른 데이터베이스 제품의 테이블을 포함하는 Transact-SQL 문을 실행할 수 있도록 구성됩니다. Microsoft Access 및 Excel을 포함하여 많은 유형의 OLE DB 데이터 원본을 연결된 서버로 구성 할 수 있습니다.
연결된 서버는 다음과 같은 장점을 제공합니다.
연결된 서버 에 대해 자세히 알아보십시오 .
서버 객체-> 연결된 서버-> 새로운 연결된 서버
원격 서버 이름을 제공하십시오.
원격 서버 유형 (SQL Server 또는 기타)을 선택하십시오.
보안->이 보안 컨텍스트를 사용하여 작성을 선택하고 원격 서버의 로그인 및 비밀번호를 제공하십시오.
확인을 클릭하면 완료됩니다!
다음 은 연결된 서버를 만드는 간단한 자습서입니다.
또는
쿼리를 사용하여 연결된 서버를 추가 할 수 있습니다.
통사론:
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
SELECT
*
FROM
[SERVER2NAME].[THEDB].[THEOWNER].[THETABLE]
연결된 서버 사용을 볼 수도 있습니다. 링크 된 서버는 DB2 플랫폼과 같은 다른 유형의 데이터 소스 일 수도 있습니다. 이것은 SQL Server TSQL 또는 Sproc 호출에서 DB2에 액세스하는 방법 중 하나입니다 ...
Could not find server '88.208.229.164' in sys.servers. Verify that the correct server name was specified. If necessary, execute the stored procedure sp_addlinkedserver to add the server to sys.servers.
서로 다른 2 개의 데이터베이스에 대한 쿼리는 분산 쿼리입니다. 다음은 몇 가지 기술과 장단점 목록입니다.
이것들은 모두 훌륭한 답변이지만,이 답변은 누락되어 있으며 강력한 용도로 사용됩니다. 아마도 OP가 원하는 것에 맞지 않을 수도 있지만 질문은 모호했으며 다른 사람들이 여기에서 길을 찾을 수 있다고 생각합니다. 기본적으로 1 개의 창을 사용하여 여러 서버에 대해 동시에 쿼리를 실행할 수 있습니다. 방법은 다음과 같습니다.
SSMS에서 등록 된 서버를 열고 로컬 서버 그룹 아래에 새 서버 그룹을 만듭니다 .
이 그룹 아래 에서 조회하려는 각 서버에 대해 새 서버 등록 을 작성하십시오 . DB 이름이 다른 경우 특성에서 각각의 기본값을 설정하십시오.
이제 첫 번째 단계에서 생성 한 그룹으로 돌아가서 마우스 오른쪽 버튼을 클릭하고 새 쿼리를 선택하십시오. 새 쿼리 창이 열리고 실행하는 모든 쿼리가 그룹의 각 서버에서 실행됩니다. 결과는 레코드의 서버를 나타내는 추가 열 이름과 함께 단일 데이터 세트로 표시됩니다. 상태 표시 줄을 사용하면 서버 이름이 여러 개로 바뀝니다. .
SQL_server 2008을 원격 서버에서 호스팅되는 SQL_server 2016에 연결하는 것과 동일한 문제가있었습니다. 다른 답변은 저에게 직접 효과가 없었습니다. 다른 사람에게 유용 할 수 있다고 생각하면서 여기에 조정 된 솔루션을 작성합니다.
원격 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
한 서버에서 다른 서버로 연결된 서버 정의를 만든 다음 (이 작업을 수행하려면 SA가 필요함) 4 부분으로 이름을 지정하여 참조하십시오 (BOL 참조).
서버 2008 :
SSMS가 server1.DB1에 연결된 경우 다음을 시도하십시오.
SELECT * FROM
[server2].[DB2].[dbo].[table1]
다른 사람들이 지적했듯이, 작동하지 않으면 서버가 연결되어 있지 않기 때문입니다.
오류가 발생합니다.
sys.servers에서 서버 DB2를 찾을 수 없습니다. 올바른 서버 이름이 지정되었는지 확인하십시오. 필요한 경우 저장 프로 시저 sp_addlinkedserver를 실행하여 sys.servers에 서버를 추가하십시오.
서버를 추가하려면
참조 : sp_addlinkedserver를 사용하여 서버를 추가하려면 링크 : [1] : sp_addlinkedserver를 사용하여 서버를 추가하려면
sys.servers에 무엇이 있는지 보려면 그냥 쿼리하십시오.
SELECT * FROM [sys].[servers]
@ Super9는 데이터 공급자 SQLOLEDB 와 함께 SQL Server 인증을 사용하여 OPENDATASOURCE에 대해 설명했습니다 . 방금 한 테이블의 코드 스 니펫이 코드가 실행중인 현재 서버 데이터베이스에 있고 다른 서버 '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
나는 이것이 오래된 질문이라는 것을 알고 있지만 동의어를 사용합니다. 쿼리가 데이터베이스 서버 A 내에서 실행되고 서버 A에 존재하지 않는 데이터베이스 서버 B에서 테이블을 찾습니다. 서버 B에서 테이블을 호출하는 A 데이터베이스에서 동의어를 추가하십시오. 스키마 또는 다른 데이터베이스 이름을 포함하려면 평소마다 테이블 이름을 호출하면 작동합니다.
동의어가 일종의 연결이기 때문에 서버를 연결할 필요가 없습니다.
연결된 서버 추가를위한 단순화 된 솔루션
첫 번째 서버
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]