SQL Server 表中 nvarchar(max)列的最大数量是多少?

3
SQL Server 2008 R2中定义Nvarchar(max)列的限制是什么?
我看到了这个链接 但是,我想知道一张表中nvarchar(max)列的限制数量。
3个回答

8

1024 非稀疏。

30000 稀疏。

列的 NVARCHAR(MAX) 没有什么特殊之处。您将无法创建一个包含那么多非空值的行,但这是一个不同的话题。


4
问题是可以创建多少列还是可以填充多少列?Remus关于可创建的数量是正确的。填充它们是另一回事。
您可以在数据页上的列中放置高达8000字节(左右)的数据。然而,如果您想在列中放置长数据,则根据SQL Server文档,您只剩下24个字节的开销在原始页面上。
由于页面仅限于大约8000字节的数据,因此填充列的实际限制更像是8,000/24 = 333列。当然,这取决于表中的其他列。

这将是行大小限制,即一行中可以填充多少个非空值。表仍然可以有30k列。 - Remus Rusanu
@RemusRusanu...非常正确。您可以添加列而不填充数据。这不是我思考问题的方式,但您完全正确。 - Gordon Linoff

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.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接