2013-06-01 3 views

ответ

7

1024 не разреженных.

30000 редкий.

В колонке нет ничего особенного: NVARCHAR(MAX). Вы не сможете создать строку с таким количеством ненужных значений, но это другая тема.

3

Вопрос: сколько может быть создано или сколько можно заполнить? Ремус правильно указал на число, которое может быть создано. Заселение их - это другое дело.

Вы можете поместить данные в столбцы до 8000 байт (или около того) на страницу данных. Тем не менее, если вы хотите поместить длинные данные в столбцы, тогда вы остаетесь с 24 байтами служебных данных на исходной странице в соответствии с SQL Server documentation.

Поскольку страница ограничена примерно 8000 байтами данных, практический предел заполненных столбцов больше похож на 8000/24 ​​= 333 столбца. Конечно, это зависит от других столбцов, которые находятся в таблице.

+0

Это будет ограничение по размеру строки, сколько ненулевых значений можно заполнить в строке. Стол может содержать 30k столбцов. –

+0

@RemusRusanu. , , Очень верно. Вы можете помещать столбцы и не заполнять их данными. Я не думал об этом, но вы совершенно правы. –

2

Я согласен с @RemusRusanu и GordonLinoff.

Вы можете использовать следующий запрос для создания таблицы с 1024 столбцами nvarchar (Max).

CREATE Proc [dbo].[CreateTable_NvarcharMax] 
(@TableName nvarchar(100),@NumofCols int) 
AS 
BEGIN 

DECLARE @i INT 
DECLARE @MAX INT 
DECLARE @SQL VARCHAR(MAX) 
DECLARE @j VARCHAR(10) 
DECLARE @len int 
SELECT @i=1 
SELECT @[email protected] 
SET @SQL='CREATE TABLE ' + @TableName + '(' 

WHILE @i<[email protected] 

BEGIN 
select @j= cast(@i as varchar) 
SELECT @SQL= @SQL+'X'[email protected] +' NVARCHAR(Max) , ' 
SET @i = @i + 1 
END 
select @len=len(@SQL) 

select @SQL = substring(@SQL,0,@len-1) 


SELECT @SQL= @SQL+ ')' 

exec (@SQL) 

END 

GO 

exec [dbo].[CreateTable_NvarcharMax] 'Test', 1024 

Этот запрос будет выполнен успешно и создаст таблицу с 1024 столбцами, но даст следующее сообщение.

Warning: The table "Test" has been created, but its maximum row size exceeds the allowed maximum of 8060 bytes. INSERT or UPDATE to this table will fail if the resulting row exceeds the size limit.