이와 같은 문제는 SQL 서버를 만든 사람들이 실제로 제품을 사용한 적이 없다는 것을 보여줍니다. 이것은 그들이 단순히 무엇을 올바르게 잊었는지 궁금해해야 할 눈부신 누락입니다 (다른 DB 가하는 것처럼이 작업을 수행하기 위해 극복해야했던 약 30 가지의 다른 미친 문제 목록이 있습니다. 처음부터이 작업을 수행하기 위해 화려한 마법사가 필요하다는 사실을 포함하여 [이 마법사가 동일한 DB에 대해 동일한 테이블을 연결하고 열거 할 때까지 기다린 시간이있을 때마다 ... 나는 좋은 휴가를 보낼 시간이있다]).
나는 매우 게으르고 입력하고 싶지 않습니다 EXEC sp_msforeachtable ...
내가 할 때마다 두 번. 내 해결 방법은 프로덕션 서버에 제약 조건을두고 dev 서버에서 제약 조건을 제거하는 것이 었습니다. 이렇게하면 오류가 방지되지만이 방법에는 몇 가지 매우 큰 부작용이 있습니다. 첫째, 더 이상 전체 백업을 복원하지 않아도 개발자 서버에 전체 백업을 복원 할 수 없습니다. 둘째, 데이터 소비자가 이러한 제약 조건을 적용하거나 신경 쓰지 않는다고 확신 할 때 가장 효과적입니다. 필자의 경우 하나의 소비자 (웹 사이트) 만 있으므로 이러한 제한 사항을 사이트 코드에도 작성했습니다 (즉, 사용자 레코드를 삭제하기 전에 해당 사용자의 모든 전화 레코드를 먼저 삭제합니다). 예, 이것은 본질적으로 제약 조건의 필요성을 처음부터 무시하고 내가해야 할 작업을 두 배로 늘리지 만 DBMS 기반 제약 조건이 있거나없는 코드가 작동하는지 확인할 수있는 기회를 제공합니다 (사실은 여전히 제품에 있습니다 비상 계획으로 만 서버). 당신은 이것을 내 디자인의 결함이라고 부를 수는 있지만 결함이있는 DBMS에 대한 해결 방법이라고 부릅니다. 어쨌든 MSSQL 자체의 디자인에 대처할 수 없기 때문에 MSSQL 이외의 다른 곳에서도이 작업을 더 빠르고 쉽게 수행 할 수 있습니다.
sp_msforeachtable
(및sp_MSForEachDb
)은 문서화되지 않았으며 지원되지 않습니다. 사용을 피하거나 피해야합니다. 테이블을 건너 뛸 수 있습니다! > - @AaronBertrand에서이 포스트를 참조하십시오 sqlblog.com/blogs/aaron_bertrand/archive/2010/12/29/... 이 연결 항목 - (MS 그들이 그것을 해결 습관을 나타내는을) -> connect.microsoft.com/SQLServer / feedback / details / 264677 /…