Het is gewoon is .
Ik heb echter nooit een probleem opgemerkt, omdat een van mijn controles zou zijn om ervoor te zorgen dat mijn parameters overeenkomen met de lengtes van mijn tabelkolommen. Ook in de klantcode. Persoonlijk zou ik verwachten dat SQL nooit gegevens ziet die te lang zijn. Als ik afgekapte gegevens zou zien, zou het duidelijk zijn wat de oorzaak was.
Als je varchar(max) toch nodig hebt, pas dan op voor een enorm prestatieprobleem vanwege de prioriteit van het datatype. varchar(max) heeft een hogere prioriteit dan varchar(n) (langste is hoogste). Dus bij dit type zoekopdracht krijg je een scan, geen zoekopdracht en elke varchar(100)-waarde is CAST naar varchar(max)
UPDATE ...WHERE varchar100column = @varcharmaxvalue
Bewerken:
Er is een open Microsoft Connect-item met betrekking tot dit probleem.
En het is waarschijnlijk de moeite waard om te worden opgenomen in de strikte instellingen van Erland Sommarkog (en bijpassend Connect-item).
Edit 2, na de opmerking van Martin:
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;