Impossible de créer une ligne de taille 8064 qui est supérieur à la limite permise de taille de ligne 8060

J'ai cette étrange problème lors de l'ajout d'une colonne à une table existante.

La table existante ressemble :

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]

Maintenant, le sql, je suis en train d'exécuter ressemble :

ALTER TABLE BinaryAssets.BinaryAssets ADD
 [Version] INT NOT NULL CONSTRAINT DF_BinaryAssets_Version DEFAULT 1

ALTER TABLE BinaryAssets.BinaryAssets
 DROP CONSTRAINT DF_BinaryAssets_Version

Quand je suis en train d'exécuter-je obtenir une sqlexception (voir le Titre).

Maintenant, je ne pense pas que ma table dépasse 8060, alors quel est le problème ici. Chose étrange, c'est que lorsque je modifie par exemple le Nom de type nvarchar(max), nvarchar(100), puis l'exécution de mes nouvelles sql et ensuite changer l'ordre de 100 à MAX, il ne fonctionne pas... logique semble loin d'ici.

Quelqu'un peut-il me dire ce que je fais mal?

que mettrez-vous en [Nom] qui nécessite de type nvarchar(max) ? Tu ne peux pas utiliser de type nvarchar(100)?
Je comprends les réponses vous dire les 8000 est la taille maximale d'un enregistrement. Mais comment est-ce que vous pouvez la redimensionner pour max, plus tard... Ce n'est qu'une (très fou) deviner: peut-être que max est en indiquant "utiliser tout l'espace disponible" et lorsque vous la créez, sqlserver est de réserver l'espace disponible pour l'instant (avant d'arriver en compte le reste des champs). Donc, vous pourriez essayer de créer la table avec le [Nom] dans la dernière position, pour voir ce qui se passe 🙂 (juste pour le fun)
Mmm, en effet, que peut-être, mais je continue de trouver ça étrange.
Pouvez-vous modifier le post / balises pour indiquer SQL 7/2000/2005/2008 puisque les réponses pour SQL 2000/7 serait totalement erroné si c'est 2005/2008
J'ai essayé de reproduire ce en vain - même si j'spécifiquement le premier de la page et de vérification préalable à la commande alter (à l'aide de la commande dbcc ind / dbcc page pour vérifier que je suis à la limite) je n'arrive pas à lancer l'erreur. Est-il autre chose que vous avez omis ou de la simplification que vous avez appliqué?

OriginalL'auteur Lieven Cardoen | 2010-01-25