Các vấn đề như thế này cho chúng ta thấy rằng những người tạo ra máy chủ SQL chưa bao giờ thực sự sử dụng sản phẩm của họ. Đây là một thiếu sót to lớn đến nỗi người ta phải tự hỏi họ còn quên làm gì nữa một cách chính xác (Tôi đã có một danh sách khoảng 30 vấn đề điên rồ khác như thế này mà tôi phải khắc phục để làm việc này khi các DB khác giải quyết của hộp, bao gồm cả việc chúng ta cần một thuật sĩ tệ hại để làm điều này ngay từ đầu [nếu tôi có thời gian chờ đợi thuật sĩ này kết nối và liệt kê các bảng giống nhau cho cùng một DB, mọi lúc, trở lại ... Tôi sẽ có thời gian cho một kỳ nghỉ tốt đẹp]).
Tôi rất lười biếng và không muốn gõ EXEC sp_msforeachtable ...
hai lần mỗi lần tôi làm điều này Công việc của tôi là để lại các ràng buộc trên máy chủ sản xuất và xóa chúng khỏi máy chủ dev. Điều này sẽ ngăn chặn lỗi nhưng phương pháp này có một vài tác dụng phụ RẤT LỚN. Đầu tiên, bạn sẽ không còn có thể khôi phục lại bản sao lưu đầy đủ cho máy chủ dev của mình (trừ khi bạn ổn với việc xóa tất cả chúng một lần nữa). Thứ hai, điều này hoạt động tốt nhất khi bạn chắc chắn rằng người tiêu dùng dữ liệu của bạn cũng thực thi các ràng buộc này (hoặc không quan tâm đến chúng). Trong trường hợp của tôi, chúng tôi chỉ có một người tiêu dùng (trang web của chúng tôi) vì vậy chúng tôi cũng đã xây dựng các ràng buộc này vào mã trang web (tức là trước khi xóa bản ghi người dùng, chúng tôi sẽ xóa tất cả các bản ghi điện thoại cho người dùng đó trước). Đúng, điều này về cơ bản phủ nhận sự cần thiết của các ràng buộc ở nơi đầu tiên và tăng gấp đôi công việc tôi cần làm nhưng nó cũng cho tôi cơ hội để xác minh rằng mã của tôi hoạt động có hoặc không có các ràng buộc dựa trên DBMS (thực tế là chúng vẫn còn trên prod máy chủ chỉ là một kế hoạch dự phòng). Bạn có thể gọi đây là một lỗ hổng trong thiết kế của tôi nhưng tôi muốn gọi nó là một cách giải quyết cho một DBMS thiếu sót. Ở bất cứ giá nào, nó vẫn nhanh hơn và dễ dàng hơn để làm điều này ở bất cứ nơi nào khác ngoài từ trong MSSQL vì không thể đối phó với thiết kế của chính nó.
sp_msforeachtable
(vàsp_MSForEachDb
) không có giấy tờ và không được hỗ trợ. Bạn không nên / tránh sử dụng nó. Nó có thể bỏ qua các bảng !! Xem bài đăng này từ @AaronBertrand -> sqlblog.com/bloss/aaron_bertrand/archive/2010/12/29/ và mục kết nối này - (MS chỉ ra rằng họ sẽ không sửa nó) -> connect.microsoft.com/QueryServer / feedback / chi tiết / 264677 / Nhận