簡體   English   中英

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

[英]Maximum number of nvarchar(max) columns in sql server tables

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

我看到了這個鏈接

但是,我希望在一個表中獲得nvarchar(max)列的限制數量。

1024非稀疏。

30000稀疏。

該列是NVARCHAR(MAX)沒有什么特別之處。 您將無法使用那么多非空值創建行,但這是一個不同的主題。

問題是可以創建多少或可以填充多少? Remus對於可以創建的數字是正確的。 填充它們是另一回事。

您可以在數據頁中將數據放入最多8000個字節(或左右)的列中。 但是,如果要將長數據放在列中,則根據SQL Server文檔 ,在原始頁面上留下24字節的開銷。

由於頁面限制為大約8,000字節的數據,因此填充列的實際限制更像是8,000 / 24 = 333列。 當然,這取決於表中的其他列。

我同意@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.

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM