1
SQL Server 2012 데이터베이스에는 레코드를 가져 와서 업데이트해야하는 두 번째 SQL Server 데이터베이스에 연결된 서버 참조가 있습니다.SQL Server에 연결된 서버 업데이트 - 끔찍한 성능
UPDATE
Linked_Tbl
SET
Transferred = 1
FROM
MyLinkedServer.dbo.MyTable Linked_Tbl
JOIN
MyTable Local_Tbl ON Local_Tbl.LinkedId = Linked_Tbl.Id
JOIN
MyOtherTable Local_Tbl2 ON Local_Tbl.LocalId = Local_Tbl2.LocalId
나는 여전히 실행되면서 실행 시간 후 정지했다 :
은 내가 실행하려고 다음 업데이트 문이있다.
저는 온라인을 읽고 최선의 해결책은 링크 된 서버 자체에 저장 프로 시저를 작성하여 와이어를 통해 실행하는 대신 업데이트 명령문을 실행하는 것입니다. 내가 가진
문제는 다음과 같습니다
- 내가 다른 서버에있는 모든 절차를 만들 수있는 능력이 없습니다.
- 그 프로 시저를 만들 수 있더라도 업데이트를 위해 모든 ID를 저장 프로 시저에 전달해야하며 수천 개의 ID를 사용하여 효율적으로 수행하는 방법을 알지 못합니다. (분명히 더 작습니다. 문제의, 내가 처음부터 그 절차를 만들 수 없기 때문에).
사람들이 다른 서버를 변경할 수있는 권한이없는 경우가 많으므로 사람들이 해결할 수있는 다른 솔루션이 있기를 바랍니다.
어떤 아이디어 ??
이 솔루션은보다 오히려 로컬 서버의 소스를 조회 대상 서버에 프로 시저를 만들 확실히 로컬에서 로컬로 업데이트를 보내는 절차. 이 작업을 수행 할 수 없다면 RBAR 업데이트를 링크 된 서버로 가져올 것입니다 (이 문제를 해결할 방법이 없다고 생각합니다). 해결 방법이 있다고 생각하지 마십시오. # 2 답을 얻으려면 원격 업데이트의 일부로 각 행을 개별적으로 보내는 것보다 연결된 서버에서 ID를 선택하는 것이 훨씬 효율적입니다. –
원격 서버에서 저장 프로 시저를 만들 필요는 없습니다. 업데이트가 들어있는 동적 인 SQL을 사용하면,'EXEC AT'로 코드를 실행하면 원격 서버가 모든 것을 처리합니다. 다음을 참조하십시오. https://social.msdn.microsoft.com/Forums/sqlserver/en-US/ec527f63-d454-4b8a-81e9-23a2ff54c1ca/execute-at-with-dynamic-linked-server-name?forum = transactsql – Alejandro
@Alejandro, 고마워, 이거 진짜 유일한 방법 같아. 난 거대 팬이 아니지만이 상황에서 가장 좋은 대안 인 것 같아. –