Es ist einfach ist .
Ich habe jedoch nie ein Problem bemerkt, da eine meiner Prüfungen darin bestehen würde, sicherzustellen, dass meine Parameter mit den Längen meiner Tabellenspalten übereinstimmen. Auch im Kundencode. Persönlich würde ich erwarten, dass SQL niemals zu lange Daten sieht. Wenn ich abgeschnittene Daten sehen würde, wäre die Ursache offensichtlich.
Wenn Sie varchar(max) für notwendig halten, achten Sie auf ein massives Leistungsproblem aufgrund des Vorrangs von Datentypen. varchar(max) hat eine höhere Priorität als varchar(n) (am längsten ist am höchsten). Bei dieser Art von Abfrage erhalten Sie also einen Scan, keinen Suchvorgang, und jeder varchar(100)-Wert wird in varchar(max) umgewandelt
UPDATE ...WHERE varchar100column = @varcharmaxvalue
Bearbeiten:
Zu diesem Problem gibt es ein offenes Microsoft Connect-Element.
Und es ist wahrscheinlich würdig, in Erland Sommarkogs strenge Einstellungen (und das passende Verbindungselement) aufgenommen zu werden.
Edit 2, nach Martins Kommentar:
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;