2013-06-01 49 views

回答

7

1024非稀疏。

30000稀疏。

對於列爲NVARCHAR(MAX)沒有什麼特別之處。您將無法創建具有許多值的行,但這是一個不同的主題。

3

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

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

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

+0

這將是您可以在一行中填充多少非空值的行大小限制。表格仍然可以有30k列。 –

+0

@RemusRusanu。 。 。非常真實。您可以放入列中,而不是用數據填充它們。那不是我想到這個問題的方式,但你對此完全正確。 –

2

我同意@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. 
相關問題