SQL Server 2008 R2中定义Nvarchar(max)列的限制是什么?sql server表中nvarchar(max)列的最大数目
我看到这个link
但是,我希望得到一个表为nvarchar(最大)列的数量限制。
SQL Server 2008 R2中定义Nvarchar(max)列的限制是什么?sql server表中nvarchar(max)列的最大数目
我看到这个link
但是,我希望得到一个表为nvarchar(最大)列的数量限制。
1024非稀疏。
30000稀疏。
对于列为NVARCHAR(MAX)
没有什么特别之处。您将无法创建具有许多值的行,但这是一个不同的主题。
问题可以创建多少个或者可以填充多少个? Remus在可创建的数字上是正确的。填充它们是另一回事。
您可以将数据放在数据页上最多8000字节(或左右)的列中。但是,如果您想在列中放入较长的数据,则根据SQL Server documentation,原始页面上会留下24个字节的开销。
由于页面被限制为大约8,000字节的数据,所以填充列的实际限制更像8,000/24 = 333列。当然,这取决于表中的其他列。
我同意@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.
这将是您可以在一行中填充多少非空值的行大小限制。表格仍然可以有30k列。 –
@RemusRusanu。 。 。非常真实。您可以放入列中,而不是用数据填充它们。那不是我想到这个问题的方式,但你对此完全正确。 –