2013-06-01 48 views

回答

7

1024非稀疏。

30000稀疏。

对于列为NVARCHAR(MAX)没有什么特别之处。您将无法创建具有许多值的行,但这是一个不同的主题。

3

问题可以创建多少个或者可以填充多少个? Remus在可创建的数字上是正确的。填充它们是另一回事。

您可以将数据放在数据页上最多8000字节(或左右)的列中。但是,如果您想在列中放入较长的数据,则根据SQL Server documentation,原始页面上会留下24个字节的开销。

由于页面被限制为大约8,000字节的数据,所以填充列的实际限制更像8,000/24 = 333列。当然,这取决于表中的其他列。

+0

这将是您可以在一行中填充多少非空值的行大小限制。表格仍然可以有30k列。 –

+0

@RemusRusanu。 。 。非常真实。您可以放入列中,而不是用数据填充它们。那不是我想到这个问题的方式,但你对此完全正确。 –

2

我同意@RemusRusanu和GordonLinoff。

您可以使用以下查询创建一个具有1024个nvarchar(最大)列的表。

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. 
相关问题