Tôi có một dự án Công cụ dữ liệu SQL Server (VS2012) được xuất bản tự động trong quá trình xây dựng. Một cột gần đây đã được cập nhật từ một int
đến decimal(18,4)
. Do thay đổi này, việc xuất bản không thành công với lỗi
(49,1): SQL72014: .Net SqlClient Nhà cung cấp dữ liệu: Msg 50000, Cấp 16, Trạng thái 127, Dòng 6 đã được phát hiện. Cập nhật lược đồ đang chấm dứt vì mất dữ liệu có thể xảy ra. (44,0): SQL72045: Lỗi thực thi tập lệnh. Tập lệnh được thực thi: / * Loại cho cột Số lượng Được nhận trong bảng [dbo]. Mất dữ liệu có thể xảy ra. * /
NẾU EXISTS (chọn top 1 1 từ [dbo]. [Reconcestion_Receiving]) RAISERROR (N'Rows đã được phát hiện. Cập nhật lược đồ đang chấm dứt vì mất dữ liệu có thể xảy ra. ', 16, 127) VỚI NGAY BÂY GIỜ bị xử tử.
Tôi hiểu lý do tại sao tôi nhận được lỗi đó và tôi biết rằng nó có thể được giải quyết bằng cách vô hiệu hóa cờ "Chặn triển khai tăng dần nếu mất dữ liệu có thể xảy ra". Tuy nhiên, có sự phản đối rất mạnh mẽ đối với việc vô hiệu hóa tính năng đó, vì vậy đây sẽ không phải là một giải pháp chấp nhận được.
Giải pháp khác duy nhất tôi có thể nghĩ đến là làm như sau:
- Tạo một bảng tạm thời và sao chép nội dung của bảng hiện có vào bảng tạm thời
- Cắt bớt bảng hiện có
- Hãy để SSDT cập nhật kiểu dữ liệu
- Điền lại dữ liệu từ bảng tạm thời
Điều đó có vẻ khủng khiếp và không hiệu quả, mặc dù.
Có một lựa chọn tốt hơn?