3

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

我看到这个链接

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

4

3 回答 3

8

1024 非稀疏。

30000稀疏。

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

于 2013-06-01T06:42:00.553 回答
3

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

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

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

于 2013-06-01T06:46:10.240 回答
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.
于 2014-04-07T18:48:11.703 回答