Itu hanya adalah .
Saya tidak pernah melihat masalah karena salah satu pemeriksaan saya adalah memastikan parameter saya cocok dengan panjang kolom tabel saya. Dalam kode klien juga. Secara pribadi, saya berharap SQL tidak pernah melihat data yang terlalu panjang. Jika saya benar-benar melihat data yang terpotong, pasti penyebabnya berdarah.
Jika Anda merasa perlu untuk varchar(max) waspadalah terhadap masalah kinerja besar-besaran karena prioritas tipe data. varchar(max) memiliki prioritas lebih tinggi daripada varchar(n) (terpanjang adalah tertinggi). Jadi dalam jenis kueri ini Anda akan mendapatkan pemindaian bukan pencarian dan setiap nilai varchar(100) CAST ke varchar(max)
UPDATE ...WHERE varchar100column = @varcharmaxvalue
Sunting:
Ada item Microsoft Connect terbuka mengenai masalah ini.
Dan itu mungkin layak untuk dimasukkan dalam pengaturan Ketat Erland Sommarkog (dan item Connect yang cocok).
Sunting 2, setelah komentar Martins:
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;