Không, nó không được ghi lại ở bất cứ đâu. Đi bỏ phiếu và nêu trường hợp kinh doanh của bạn; đây là một trong danh sách dài những điều cần được sửa trong SQL Server.
Điều này đã được yêu cầu nhiều năm trước trên Connect (có thể là lần đầu tiên trong khung thời gian SQL Server 2000 hoặc 2005), sau đó một lần nữa trên hệ thống phản hồi mới:
Và bây giờ, nó đã được phân phối, trong SQL Server 2019 , SQL Server 2017 CU12 và sẽ xuất hiện trong SQL Server 2016 SP2 CU trong tương lai.
Trong CTP công khai đầu tiên của SQL Server 2019, nó chỉ xuất hiện dưới cờ theo dõi 460. Điều này nghe có vẻ bí mật, nhưng nó đã được xuất bản trong whitepaper của Microsoft này . Đây sẽ là hành vi mặc định (không yêu cầu cờ theo dõi) trong tương lai, mặc dù bạn sẽ có thể kiểm soát điều này thông qua cấu hình phạm vi cơ sở dữ liệu mới VERBOSE_TRUNCATION_WARNINGS
.
Đây là một ví dụ:
USE tempdb;
GO
CREATE TABLE dbo.x(a char(1));
INSERT dbo.x(a) VALUES('foo');
GO
Kết quả trong tất cả các phiên bản được hỗ trợ trước SQL Server 2019:
Msg 8152, Cấp 16, Trạng thái 30,
Chuỗi dòng 5
hoặc dữ liệu nhị phân sẽ bị cắt ngắn.
Các tuyên bố này đã bị chấm dứt.
Bây giờ, trên SQL Server 2019 CTPs, với cờ theo dõi được bật:
DBCC TRACEON(460);
GO
INSERT dbo.x(a) VALUES('foo');
GO
DROP TABLE dbo.x;
DBCC TRACEOFF(460);
Kết quả hiển thị bảng, cột và giá trị ( cắt ngắn , không đầy đủ ):
Msg 2628, Cấp 16, Trạng thái 1,
Chuỗi 11
hoặc dữ liệu nhị phân sẽ bị cắt ngắn trong bảng 'tempdb.dbo.x', cột 'a'. Giá trị rút gọn: 'f'.
Các tuyên bố này đã bị chấm dứt.
Cho đến khi bạn có thể bỏ mọi thứ và nâng cấp lên SQL Server 2019 hoặc chuyển sang Cơ sở dữ liệu SQL Azure, bạn có thể thay đổi mã "tự động" của mình để thực sự lấy max_length từ đó sys.columns
, cùng với tên mà bạn phải đặt ở đó, sau đó áp dụng LEFT(column, max_length)
hoặc dù tương đương với PG là gì. Hoặc, vì điều đó chỉ có nghĩa là bạn sẽ âm thầm mất dữ liệu, hãy tìm ra những cột nào không khớp và sửa các cột đích để chúng khớp với tất cả dữ liệu từ nguồn. Cấp quyền truy cập siêu dữ liệu cho cả hai hệ thống và thực tế là bạn đã viết một truy vấn phải tự động khớp nguồn -> cột đích (nếu không thì lỗi này khó có thể là vấn đề lớn nhất của bạn), bạn không cần phải thực hiện bất kỳ hành động thô lỗ nào đoán ở tất cả.
sys.columns
vì tôi hoàn toàn không biết bạn đang sử dụng mã nào để "tự động" tạo các truy vấn của bạn. Thực sự không có quá nhiều phức tạp tôi có thể đoán về việc kết hợp vào mã của bạn hơnSELECT name, object_id, max_length FROM sys.columns;
. Vì bạn đã có mã tự động phải thực hiện điều này - hoặc một cái gì đó rất giống nó - tôi không nghĩ rằng một ví dụ là cần thiết.