2010-02-05 5 views
7

원격 연결된 서버에 대해 상당히 복잡한 쿼리를 수행하고 있으며 일부 정보를 임시 테이블에 저장 한 다음 원격 테이블에 대한 조인을 수행하는 것이 유용합니다. 로컬에서 임시 테이블을 만들고 와이어를 통해 임시 테이블을 조인하는 것은 매우 어렵습니다.연결된 서버에서 임시 테이블을 만들 수 있습니까?

강제로 임시 테이블을 원격 서버에 만들 수 있습니까? 내 실제 (영구) 테이블을 만들 충분한 권한이 없다고 가정합니다.

답변

2

연결된 원격 서버에 임시 테이블을 직접 만들 수 없습니다. 실제로 연결된 서버에 대해서는 DDL을 사용할 수 없습니다. 연결된 서버를 사용하는 지침 및 제한 사항에 대한 추가 정보를 원하시면

은 다음을 참조하십시오

작업 주위에 (그리고 내 머리 위로 떨어져, 이것이에만 경우

Guidelines for Using Distributed Queries (SQL 2008 Books Online)

하나 일 것입니다) 원격 서버에 대한 사용 권한을 가지고 그럴 수 : 원격 서버에

  • 이름베이스 지속 테이블을 생성 할 저장 프로 시저를 가지고 원격 저장 프로 시저가이 테이블에 결과를 삽입 한 다음 쿼리를 실행 할
  • IN 매개 변수에 D는
  • 당신은 어떤 로컬 테이블에 조인
  • 를 호출 다른 저장 프로 시저를 요구 수행하는 테이블에 대해 로컬 쿼리 원격 서버는 가능한 작업의 주위에 당신이

적합하지을 완료하면 원격 테이블을 삭제 만합니다.

4

내 환경에서 SQL 2005 SP3에 연결된 SQL 2005 SP3에서 작동합니다. 그러나 tempdb를 검사하면 테이블이 실제로 원격 인스턴스가 아니라 로컬 인스턴스에 있다는 것을 알 수 있습니다. 나는 이것을 다른 포럼의 결의안으로 보았으며 여러분을 이것으로부터 멀어지게하고 싶었습니다.

create table SecondServer.#doll 
(
    name varchar(128) 
) 
GO 
insert SecondServer.#Doll 
select name from sys.objects where type = 'u' 


select * from SecondServer.#Doll 
1

메모리가별로 문제가되지 않으면 임시 테이블 대신 테이블 변수를 사용할 수도 있습니다. Linked Server에 대해 임시 데이터 저장소가 필요한 저장 프로 시저를 실행할 때이 기능이 유용했습니다.

자세한 정보 : 예 : this comparison 테이블 변수 및 테이블 변수의 단점을 포함한 임시 테이블.

+0

단점은 내가 아는 한, 당신은 테이블 변수에 인덱스를 만들 수 있다는 것입니다 .. 원격 위치에있는 임시 테이블 생성을 실행합니다. 당신이 [테이블 변수에 인덱스를 만들 수] 수 있습니다 보인다 – alfoks

+2

(내가 ... 내가 아는 2 년 늦었 어) (http://sqlserverplanet.com/tsql/create-index-on-table-variable). (어느 쪽 인지도 몰랐습니다!) – Josien

+0

좋아요! 공유해 주셔서 감사합니다. 나는 미래에 그것을 염두에 두겠다. – alfoks

2

예. 연결 기간 동안 만 지속될 수 있습니다. EXECUTE AT 구문을 사용해야합니다.

EXECUTE('SELECT * INTO ##example FROM sys.objects; WAITFOR DELAY ''00:01:00''') AT [SERVER2] 

SERVER2에 다음 (1 분) 작동합니다;

SELECT * FROM ##example 

로컬 서버에서는 작동하지 않습니다. ## 예제를 사용하는 두 번째 서버에서 트랜잭션을 열면 트랜잭션이 닫힐 때까지 개체가 유지됩니다. 또한 첫 x 째 서 v의 작성 설명을 완료하지 못하게합니다. 즉 server2에서 실행되고 server1의 트랜잭션은 무한정 계속됩니다.

BEGIN TRAN 
SELECT * FROM ##example WITH (TABLOCKX) 

실용적인 것보다 더 능숙합니다.

1

나는 2 년 늦게 파티에 모르지만,이 sp_executeSQL 사용하여 원격으로 테이블을 만드는 그것을 동적 쿼리 먹이를 수행 할 수 있습니다.

Exec RemoteServer.RemoteDatabase.RemoteSchema.SP_ExecuteSQL N'Create Table here'

은 다음과

관련 문제