저는 현재 2 개의 SQL 데이터베이스가있는 시나리오를 다루고 있으며 2 개의 데이터베이스에있는 각 테이블의 데이터 변경 내용을 비교해야합니다. 데이터베이스는 서로 동일한 정확한 테이블을 가지고 있지만 각각에 서로 다른 데이터가있을 수 있습니다. 첫 번째 장애물은 데이터 세트를 비교하는 방법과 두 번째 도전은 차이점을 확인한 후 데이터베이스 1에 존재하지 않았던 데이터베이스 2에 누락 된 업데이트 데이터를 어떻게 표현할 것인가입니다.SQL Server 데이터베이스를 비교하고 다른 데이터베이스를 업데이트하려면 어떻게합니까?
답변
휠을 다시 발명하는 대신 SQL 데이터 비교를 사용하지 않는 이유는 무엇입니까? 그것은 정확히 당신이 요구하는 것입니다 - 두 데이터베이스를 비교하고 어느 방향으로 동기화 스크립트를 작성하십시오. 나는 그들의 도구들 중 일부와 경쟁하는 벤더를 위해 일하는데 그것은 여전히 내가 권하는 도구이다.
http://www.red-gate.com/products/sql-development/sql-data-compare/
Redgate의 SQL 데이터 비교 및 SQL 비교는 우수한 제품입니다. 나는 그것들을 정기적으로 사용하며 코드를 배치하거나 데이터를 병합 할 때 수백 시간을 절약 해주었습니다. –
@Aaron Bertrand - 우수한 제품처럼 보이지만 무료 대안이 있습니까? – PeanutsMonkey
아마도 그럴 것이고, 간단한 웹 검색을 사용하면 그러한 검색 결과를 얻을 수 있지만 그 중 어떤 것도 시도한 적이 없습니다. 아마 다른 누군가가 무료 대안을 사용하고 있으며 논평 할 수 있습니다. –
하나 데이터 비교를위한 강력한 명령은 EXCEPT
입니다. 이와 함께, 당신은 단순히 수행하여 동일한 구조를 가진 두 개의 테이블을 비교할 수 있습니다 다음이 당신에 모두 존재하지만 (다른 행을 포함 Database1에 존재하지만 DATABASE2의 모든 행을 줄 것이다
SELECT * FROM Database1.dbo.Table
EXCEPT
SELECT * FROM Database2.dbo.Table
모든 열을 비교하기 때문에). 그런 다음 쿼리의 순서를 반대로하여 다른 방향을 확인할 수 있습니다.
차이점을 확인한 후에는 INSERT
또는 UPDATE
을 사용하여 변경 사항을 한쪽에서 다른 쪽으로 전송할 수 있습니다. 두 테이블이 서로 관련이 방법, 당신이 할 수있는 사용
INSERT INTO Database1.dbo.Table
SELECT T2.*
FROM Database2.dbo.Table T2
LEFT JOIN Database1.dbo.Table T1 on T2.PK = T1.PK
WHERE T1.PK IS NULL -- insert rows that didn't match, i.e., are new
실제 방법에 따라 달라집니다 예를 들어, 당신은 단지 DATABASE2에 와서 기본 키 필드 PK
, 새로운 행이 가정, 당신은 뭔가를 할 수 일치하는 행을 식별하고, 변경 소스가 무엇인지 확인하십시오.
고마워요. 데이터베이스가 상당히 크기 때문에 쿼리가 속도와 얼마나 빨라지는 것이 본질입니까? 둘째, 한 번에 하나의 테이블과 대조하여 테이블 목록을 비교할 수있는 방법이 있습니까? – PeanutsMonkey
쿼리는 모든 데이터를 읽는 데 필요한 검색만큼 빠릅니다. 내가 알고있는 어떤 마법도 이것보다 빨리 만들 수는 없다. 다행히도 이것은 매일하는 일이나 2 분에서 5 분 걸리는 상황에서 문제가되는 일이 아니기를 바랍니다. –
한 서버에서 다른 서버로 옮겨진 데이터를 얻으려면 잠재적으로'bcp '를 사용할 수 있습니다. 다른 하나는 임시 테이블의 데이터 덤프와 같이 신속하게 처리됩니다. 그런 다음 임시 테이블에서 실제 테이블로 로컬로 실제 업데이트를 수행하십시오. 그러나 @AaronBertrand의 대답은 전반적으로 더 좋은 제안입니다. – mellamokb
또한 비주얼 스튜디오 2010 (프리미엄 이상)의 데이터 비교 기능을 볼 수 있습니까? 필자는 모든 환경 (예 : 개발, 테스트 및 생산)의 구성 테이블이 동기화되어 있는지 확인하는 데 사용합니다. 그것은 내 인생을 엄청나게 쉬게 만들었습니다. 비교할 테이블을 선택할 수 있습니다. 비교할 열을 선택할 수 있습니다. 내가 배웠던 것은 미래의 사용을 위해 나의 선택을 저장하는 방법이다.
당신은 SQL Compare와 함께 이것을 개발할 수 있지만이 작업은 예정대로 수행하고 싶다면 Simego의 Data Sync Studio가 더 나은 해결책이 될 수 있습니다. i3 iMac (bootcamp)에서 16GB를 비교하면 약 100m (30 cols) 행을 처리 할 수 있습니다. 실제로 그것은 양쪽에 1m -> 20m 행으로 편안합니다. 열 저장 엔진을 사용합니다.
이 시나리오에서는 시나리오를 다운로드하고 설치하고 테스트하는 데 몇 분 밖에 걸리지 않습니다.
저는 항상 누군가가 묻고있는 것을 해결하기 위해 물음표를 찾는 데 도움이되기를 바랍니다.
- 1. SQL Server 2005 데이터베이스를 보호하려면 어떻게합니까?
- 2. 데이터 집합을 사용하여 데이터베이스를 업데이트하려면 어떻게합니까?
- 3. 가장 효율적인 방법으로 데이터베이스를 업데이트하려면 어떻게합니까?
- 4. SQL Server 2008 Express에서 SQL Server 2000 데이터베이스를 열려면 어떻게합니까?
- 5. SQL Server Express 데이터베이스를 다른 서버로 복사
- 6. SQL Server 데이터베이스를 삭제하는 방법
- 7. 언제 SQL Server 데이터베이스를 압축합니까?
- 8. SQL Server 데이터베이스를 복사하는 방법
- 9. 외부 데이터 소스로 데이터베이스를 효율적으로 업데이트하려면 어떻게해야합니까?
- 10. VS MVC 2 프로젝트에 SQL Server 2005 데이터베이스를 추가하려면 어떻게합니까?
- 11. SQL Server Express 데이터베이스를 프로그래밍 방식으로 백업하려면 어떻게합니까?
- 12. 인터넷을 통해 SQL Server 데이터베이스를 원격으로 연결하고 관리하려면 어떻게합니까?
- 13. SQL Server 데이터베이스를 SQL Compact 데이터베이스로 마이그레이션
- 14. Oracle 서버에서 데이터베이스를 찾으려면 어떻게합니까?
- 15. Access에서 SQL Server 데이터베이스를 복사하는 방법
- 16. REST를 사용하여 SQL Server 데이터베이스를 노출
- 17. 두 SQL Server 2005 데이터베이스를 동기화하는 방법?
- 18. SQL Server 2008에서 데이터베이스를 스크립팅하는 방법은 무엇입니까?
- 19. SQL Server 데이터베이스를 어떻게 버전 관리 하시겠습니까?
- 20. SQL Server Compact가 아닌 SQL Server 데이터베이스를 어떻게 만듭니 까?
- 21. SQL Server 오류로 데이터베이스를 열 수 없습니다.
- 22. (SQL Server) 데이터베이스를 업데이트하기위한 단계별 지침?
- 23. 데이터베이스를 사용하여 세마포를 관리하려면 어떻게합니까?
- 24. SQL Server 데이터베이스를 SQL Server Compact 데이터베이스로 변환. 등 뒤로
- 25. SQL Server 2005에서 SQL Server 2008 데이터베이스를 복원하는 방법
- 26. SQL Server 2005 데이터베이스를 SQL Server 2005에 연결하지 못했습니다.
- 27. SQL Server 2005 데이터베이스를 SQL Server 2005로 마이그레이션
- 28. SQL Server 2008 Express에서 데이터베이스를 SQL Server 2008 Express로 전송
- 29. SQL Server 2005 데이터베이스를 SQL Server 2008로 마이그레이션하는 방법은 무엇입니까?
- 30. Sql Server 2008 데이터베이스를 참조하는 Sql Server 2000 트리거가 실패합니다.
이 사용자 데이터 또는 정적 데이터입니까? 즉, 한 데이터베이스의 테이블을 지우고 다른 테이블의 테이블을 주기적으로 복사 할 수 있습니까? – mellamokb
@mellamokb - 사용자 데이터를 말할 때 정확히 무엇을 의미합니까? 데이터베이스 1의 데이터는 일반적으로 웹 인터페이스를 통해 동적으로 업데이트되지만 사이트가 오프 사이트 인 것으로 간주되므로 정적 인 것으로 간주 할 내부적으로 동일한 데이터베이스를 업데이트 할 수 있어야합니다. 데이터베이스를 지우고 다시 쓰는 것 대신 변경 사항을 식별 할 수있는 이유는 변경 사항 만 세 번째 데이터베이스에 전달해야하기 때문입니다. – PeanutsMonkey
이것은 단 한 번의 일입니까, 아니면 반복해야합니까? –