2010-08-04 10 views
5

Tôi đang sử dụng db SQL Server db và sử dụng nhiều lượt xem (để sử dụng với trình vẽ O/R). Một ít phiền toái chút là tôi muốncách xử lý cập nhật lược đồ db khi sử dụng schemabinding và cập nhật thường

  • schema sử dụng ràng buộc
  • cập nhật với các kịch bản (để triển khai trên các máy chủ và đặt trong một hệ thống kiểm soát nguồn)

nhưng chạy vào vấn đề mà bất cứ khi nào tôi muốn thêm một cột vào một bảng, trước tiên tôi phải bỏ tất cả các khung nhìn tham chiếu đến bảng đó, cập nhật bảng và sau đó tạo lại các khung nhìn, ngay cả khi các khung nhìn sẽ không cần phải được cập nhật theo cách khác. Điều này làm cho các bản cập nhật của tôi dài hơn rất nhiều và cũng có thể, tìm kiếm sự khác biệt trong hệ thống kiểm soát nguồn, khó có thể thấy sự thay đổi thực sự có liên quan.

Có cách nào tốt hơn để xử lý việc này không?

Tôi cần vẫn có thể sử dụng các bản cập nhật sql đơn giản và có thể kiểm soát nguồn. Một trình tạo mã như được bao gồm trong SQL Server Management Studio sẽ hữu ích, nhưng tôi đã gặp vấn đề với SQL Server Management Studio ở chỗ nó có xu hướng tạo mã không chỉ định tên cho một số chỉ mục hoặc ràng buộc (mặc định). Nhưng tôi muốn có các dbs giống nhau khi tôi chạy các kịch bản của mình trên các hệ thống khác nhau, bao gồm cả tên của tất cả các đường viền vv, để tôi không phải nhảy qua các vòng lặp khi cập nhật các ràng buộc sau này.

Vì vậy, có lẽ một trình tạo mã SQL thông minh hơn sẽ là giải pháp?

công việc của tôi bây giờ là: "cannot ALTER 'XXX' because it is being referenced by object 'YYY'"

  • loại các alter table tuyên bố trong trình soạn thảo truy vấn
  • kiểm tra nếu tôi nhận được một tuyên bố báo lỗi như
  • sử dụng SQL Server Managment Studio để kịch bản tôi create mã cho đối tượng tham chiếu
  • chèn một tuyên bố drop trước khi báo cáo kết quả hấp thụ và tạo ra tuyên bố sau
  • kiểm tra nếu phát biểu drop tạo ra lỗi và lặp lại

điều này làm phiền tôi, nhưng có lẽ tôi chỉ đơn giản là phải sống với nó nếu tôi muốn tiếp tục sử dụng bản cập nhật schemabinding và script ...

Trả lời

2

Bạn có thể ít nhất loại bỏ "kiểm tra nếu tôi g và một lỗi "bước bằng cách truy vấn một vài chức năng quản lý động và chế độ xem hệ thống để tìm phụ thuộc của bạn. This article đưa ra một giải thích hợp lý về cách thực hiện điều đó. Ngoài ra, tôi nghĩ rằng bạn đúng, bạn không thể có bánh của bạn và ăn nó với lược đồ ràng buộc.

Cũng xin lưu ý rằng việc giảm/tạo chế độ xem sẽ khiến bạn mất bất kỳ quyền nào được cấp trên các đối tượng đó, vì vậy, các quyền đó sẽ được bao gồm trong tập lệnh của bạn.

+1

Ồ, tốt. Tôi đoán tôi sẽ sống với nó. Lý tưởng nhất là những gì tôi muốn là: a) không có thông báo lỗi nếu bảng cập nhật không thực sự ảnh hưởng đến quan điểm (ví dụ như thêm một cột mới không nên ảnh hưởng đến chỉ đọc xem trên bảng này) b) thông báo lỗi nếu bảng cập nhật (ví dụ như thả một cột được sử dụng trong một khung nhìn) Nhưng tôi đoán MSSQL không hoạt động theo cách đó (có thể vì lý do tốt ...) Cảm ơn bạn đã nhắc nhở về quyền! –