Я перечитал это и не мог ясно понять ...
Имея (с целью сокращения этого вопроса)
DECLARE @temp VARCHAR(4001);
--update: 4001 is for example only to avoid varchar(MAX) discussions
-- I am aware about 8000
SET @temp = 'a';
SQL Server резервирует 4001 байт для @temp, который (остальные 4000 из 4001 байтов @temp) нельзя использовать для ЛЮБЫХ других целей, пока @temp не будет удален?
Если этого не произойдет, то (обновление: извините, это был вопрос риторики, я думаю, что это не изменило смысла моих вопросов):
- Почему SQL Server должен знать максимальный размер значений varchar?
- Почему строка размером больше 4001 байта не может быть (пере) назначена @temp?
обновление: если 4001 байт не выделено заранее или не зарезервировано для @ temp
- Как SQL Server использует этот размер?
Те же вопросы о таблице, содержащей один столбец varchar (4001).
Как мне назвать 4001 в varchar (4001), чтобы избежать двусмысленности с varchar (max)?
то есть избегать привлечения "максимального" слова.
[1], например, намекает, что это размер столбца:
Тип данных varchar является типом данных переменной длины. Значения короче размера столбца ... [1]
чтобы я мог понять , что этот размер зарезервирован, столбец имеет фиксированный размер (по всем строкам), независимо от более коротких значений, хранящихся там.
Правильно? Если не правильно, то
Каков размер столбца varchar (4001), используя терминологию из [1]?
Обновление
Я хотел (указав 4001) избегать отклонения этой темы от хранения значений в строке (например, SQL Server varchar (max), text и т. Д.), А также других тем, которые здесь специально не задавались.
Вопрос не в том, как использовать n в varchar (n), а в том, как его использовать (SQL Server).
Я приветствую других специалистов по СУБД, так как это должны быть вопросы, не связанные с DBМS, хотя конкретные цифры указаны в контексте SQL Server 2000 (или 2005+ без varchar (MAX))
Update2
Размер префикса длины для хранения данных таблицы в SQL Server всегда равен 2 согласно [2].
Почему бы просто не использовать varchar (), чтобы SQL Server работал с реальным размером?
Кроме того, я (намеренно) основал свой вопрос на переменной.
Также, введенная цифра действительно усекает хранилище / данные:
DECLARE @temp VARCHAR(2);
SET @temp = 'aaaaaa';
select @temp
-- result is: aa
[1]
msdn "Использование данных char и varchar"
http://msdn.microsoft.com/en-us/library/ms175055.aspx
[2]
Оценка размера кучи
http://msdn.microsoft.com/en-us/library/ms189124.aspx