sql server表中的最大nvarchar(max)列数

时间:2013-06-01 06:35:41

标签: sql-server nvarchar

SQL Server 2008 R2中定义Nvarchar(max)列的限制是什么?

我看到了link

但是,我希望在一个表中获得nvarchar(max)列的限制数量。

3 个答案:

答案 0 :(得分:8)

1024非稀疏。

30000稀疏。

NVARCHAR(MAX)没有什么特别之处。您将无法使用那么多非null 值创建一行,但这是一个不同的主题。

答案 1 :(得分:3)

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

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

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

答案 2 :(得分:3)

我同意@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 @MAX=@NumofCols
SET @SQL='CREATE TABLE ' + @TableName + '('

WHILE @i<=@MAX

BEGIN
select @j= cast(@i as varchar)
SELECT @SQL= @SQL+'X'+@j  +' 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.