Просто е .
Никога не съм забелязал проблем обаче, защото една от моите проверки би била да гарантирам, че параметрите ми съвпадат с дължината на колоните ми в таблицата. В клиентския код също. Лично аз очаквам SQL никога да не вижда твърде дълги данни. Ако видях съкратени данни, щеше да е очевидно причината за това.
Ако усетите нуждата от varchar(max), пазете се от огромен проблем с производителността поради предимство на типа данни. varchar(max) има по-висок приоритет от varchar(n) (най-дългият е най-висок). Така че при този тип заявка ще получите сканиране, а не търсене и всяка стойност на varchar(100) е CAST към varchar(max)
UPDATE ...WHERE varchar100column = @varcharmaxvalue
Редактиране:
Има отворен елемент на Microsoft Connect относно този проблем.
И вероятно си заслужава да бъде включен в строгите настройки на Erland Sommarkog (и съответстващ елемент на Connect).
Редактиране 2, след коментар на Мартинс:
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;