Tôi chắc chắn đây có thể là truy vấn khá phổ biến nhưng không thể tìm thấy câu trả lời hay như hiện tại.SQL, Làm thế nào để thay đổi cột trong bảng SQL mà không vi phạm các phụ thuộc khác?
Đây là câu hỏi của tôi:
Tôi đã có một bảng tên Liên hệ với cột VARCHAR Tiêu đề. Bây giờ ở giữa phát triển, tôi muốn thay thế trường Tiêu đề với TitleID là khóa ngoài tới ContactTitles bảng. Tại thời điểm này, bảng Liên hệ có hơn 60 phụ thuộc (các bảng khác, chức năng chế độ xem).
Tôi làm cách nào an toàn nhất và dễ dàng nhất?
Chúng tôi sử dụng: MSSQL 2005, dữ liệu đã được di chuyển, chỉ muốn thay đổi giản đồ.
Edit:
Nhờ Tất cả cho phát lại nhanh chóng.
Giống như nó đã được đề cập Liên hệ bảng có hơn 60 người phụ thuộc, nhưng khi truy vấn sau đây được chạy, chỉ có 5 trong số họ sử dụng Tiêu đề cột. Tập lệnh di chuyển đã được chạy, do đó không yêu cầu thay đổi dữ liệu.
/*gets all objects which use specified column */
SELECT Name FROM syscomments sc JOIN sysobjects so ON sc.id = so.id WHERE TEXT LIKE '%Title%' AND TEXT LIKE '%TitleID%'
Sau đó, tôi đã trải qua những 5 điểm và cập nhật chúng bằng tay.
Bạn cần phải cẩn thận một chút trong SQL2005 với điều đó. Nếu bất kỳ định nghĩa nào là> 4000 ký tự, chúng có thể được chia thành 2 hàng truy vấn trong bài viết của tôi là an toàn hơn (hoặc sử dụng sys.sql_modules sẽ được ưa thích hơn). Tôi giả sử bạn không bao giờ sử dụng '*' mà có thể mess điều lên cũng? –
@ Martin Smith bạn đúng, nhưng tôi đã nhiều hơn sau những nơi mà các cột được sử dụng. – cinek
ý tôi là có một cơ hội nhỏ mà định nghĩa được chia theo cách mà một hàng kết thúc '... Tit' và hàng tương ứng tiếp theo bắt đầu' le ... 'để truy vấn LIKE sẽ bỏ lỡ nó. –