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