Nó chỉ là .
Mặc dù vậy, tôi chưa bao giờ nhận thấy vấn đề vì một trong những kiểm tra của tôi là để đảm bảo các thông số của tôi khớp với độ dài cột trong bảng của tôi. Trong mã khách hàng cũng vậy. Cá nhân tôi mong rằng SQL sẽ không bao giờ thấy dữ liệu quá dài. Nếu tôi nhìn thấy dữ liệu bị cắt ngắn, thì rõ ràng là điều gì đã gây ra nó.
Nếu bạn cảm thấy cần phải có varchar (max), hãy cẩn thận với vấn đề hiệu suất lớn vì ưu tiên kiểu dữ liệu. varchar (max) có mức độ ưu tiên cao hơn varchar (n) (dài nhất là cao nhất). Vì vậy, trong loại truy vấn này, bạn sẽ nhận được một lượt quét chứ không phải tìm kiếm và mọi giá trị varchar (100) là CAST thành varchar (max)
UPDATE ...WHERE varchar100column = @varcharmaxvalue
Chỉnh sửa:
Có một mục Microsoft Connect đang mở liên quan đến vấn đề này.
Và nó có lẽ xứng đáng được đưa vào cài đặt Nghiêm ngặt của Erland Sommarkog (và phù hợp với mục Kết nối).
Chỉnh sửa 2, sau khi Martins nhận xét:
DECLARE @sql VARCHAR(MAX), @nsql nVARCHAR(MAX);
SELECT @sql = 'B', @nsql = 'B';
SELECT
LEN(@sql),
LEN(@nsql),
DATALENGTH(@sql),
DATALENGTH(@nsql)
;
DECLARE @t table(c varchar(8000));
INSERT INTO @t values (replicate('A', 7500));
SELECT LEN(c) from @t;
SELECT
LEN(@sql + c),
LEN(@nsql + c),
DATALENGTH(@sql + c),
DATALENGTH(@nsql + c)
FROM @t;