將列添加到現有表時,我遇到了這個奇怪的問題。無法創建一個8064的行,該行的行數大於允許的行數8060
現有的表如下所示:
CREATE TABLE [BinaryAssets].[BinaryAssets](
[BinaryAssetId] [int] IDENTITY(1,1) NOT NULL,
[BinaryAssetStructureId] [int] NOT NULL,
[Name] [nvarchar](max) NOT NULL,
[Created_By] [int] NOT NULL,
[Created_On] [bigint] NOT NULL,
[Modified_By] [int] NOT NULL,
[Modified_On] [bigint] NOT NULL,
[Active] [bit] NOT NULL,
CONSTRAINT [PK_BinaryAsset] PRIMARY KEY NONCLUSTERED
(
[BinaryAssetId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF,
ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
現在,SQL我試圖執行的模樣:
ALTER TABLE BinaryAssets.BinaryAssets ADD
[Version] INT NOT NULL CONSTRAINT DF_BinaryAssets_Version DEFAULT 1
ALTER TABLE BinaryAssets.BinaryAssets
DROP CONSTRAINT DF_BinaryAssets_Version
當我試圖執行我得到的SQLException(見標題)。
現在,我不認爲我的表超過8060,所以這裏有什麼問題。奇怪的是,當我將nvarchar(max)的名稱從nvarchar(max)更改爲nvarchar(100)時,然後執行我的新sql,然後將100更改爲MAX,它確實有效......邏輯在這裏似乎很遙遠。
有人能告訴我我在做什麼錯嗎?
你在[Name]中放入了什麼,需要nvarchar(max)?你不能只使用nvarchar(100)嗎? – gingerbreadboy 2010-01-25 13:43:36
我明白了答案,告訴你8,000尺寸是記錄的最大值。但是,你是如何將它調整到max,稍後...這只是一個(非常瘋狂)的猜測:也許max表示「使用所有可用空間」,並且當你創建它時,sqlserver將保留目前爲止的可用空間(在考慮其餘領域之前)。所以,你可以嘗試使用最後一個位置的[Name]字段來創建表格,看看會發生什麼:)(僅僅爲了好玩) – helios 2010-01-25 13:50:35
嗯,事實上,可能是這樣,但我仍然會覺得很奇怪。 – 2010-01-25 13:53:31