2012-01-16 4 views
0

Nous avons une colonne char(16) qui doit être aussi longue que char(128). Comment modifier le type de données dans SQL Server 2008 R2 si la table contient plus de 100 000 lignes? Cela n'a peut-être pas d'importance.Prolong SQL colonne type de données

Combien coûte cette opération?

+0

Vous ne devriez pas utiliser SQL si vous ne savez pas comment faire ou trouver (très facilement) comment faire cela. – leppie

+4

Savez-vous qu'une colonne 'CHAR (128)' utilisera ** toujours ** 128 caractères (octets) de stockage? Il utilisera toujours toute la longueur. Pour une longueur de cette taille, je recommande fortement d'utiliser 'VARCHAR (128)' à la place - qui utilise seulement autant d'espace que de caractères sont stockés dedans ... –

+3

Re "Combien coûte cette opération?" La taille de chaque ligne de données est étendue de 116 octets, qui doivent être insérés à la fin de chaque champ en cours d'extension, ce qui augmente la taille des données de 11,5 Mo (environ 1400 pages). Il est probable que pratiquement toutes les données de la table devront être déplacées physiquement entre les pages et les extensions. Comme recommandé par marc, l'utilisation de colonnes de largeur variable pourrait être préférable si les données stockées dans la colonne varient considérablement d'un enregistrement à l'autre, car l'extension de la capacité de la colonne ne nécessiterait pas nécessairement l'extension de chaque ligne de données. – drf

Répondre

3

En supposant que votre nom de la table est VotreTable

ALTER TABLE YourTable ALTER COLUMN YourCharColumn CHAR(128) 

ou en cas des difficultés

ALTER TABLE YourTable ADD NewChar char(128) NOT NULL CONSTRAINT df DEFAULT OldChar 
GO 
ALTER TABLE YourTable DROP CONSTRAINT df 
GO 
ALTER TABLE YourTable DROP COLUMN OldChar 
GO 
exec sp_rename('YourTable.NewChar', 'OldChar', 'COLUMN') 
+0

+1. Peut-être aussi 'ALTER TABLE YourTable ALTER COLONNE NewChar CHAR (128) NULL' comme dernière étape, si la colonne n'a pas besoin d'interdire NULLs finalement. –

+0

@AndriyM Je pense que l'auteur va comprendre que si la colonne est nullable - alors pas besoin de contrainte DEFAULT et son abandon –

+0

Pourquoi, je pensais, non, j'étais sûr, l'idée de NOT NULL + DEFAULT était d'initialiser la nouvelle colonne avec vieilles valeurs, et je suis tout à fait d'accord avec cela. Sinon, vous devrez 'UPDATE YourTable SET NewChar = OldChar'. C'est-à-dire, pour résumer, si la colonne est NOT NULL et doit rester ainsi, vous faites toutes ces étapes dans votre seconde approche, mais si la colonne doit être NULL, vous devez * en plus * ALTER pour qu'elle soit NULL. Ou qu'est-ce qui me manque? –

Questions connexes