2011-07-11 2 views
0

J'ai une table avec une taille de colonne de clé primaire est définie à 50. En raison de certaines nouvelles exigences, je dois augmenter la taille à 255. Après la recherche en ligne, j'ai compris qu'il n'est pas possible de modifier une colonne si elle fait partie d'une contrainte de clé primaire. J'ai donc pris l'approche d'abandonner la contrainte, en modifiant la colonne et en rajoutant la contrainte. Mais, je rencontre toujours un petit problème, ma colonne d'origine est de type non nul et a un ensemble de valeurs par défaut, mais maintenant quand je tente l'instruction SQL suivante, je reçois une erreur « syntaxe incorrecte près DEFAULT »Modifier la taille de colonne de la clé primaire de table à 255

ALTER TABLE [tblLocation] 
DROP CONSTRAINT [PK_tblLocation] 

ALTER TABLE [tblLocation] 
ALTER COLUMN Location VARCHAR(255) DEFAULT('New Location') NOT NULL 

ALTER TABLE [tblLocation] 
ADD 
CONSTRAINT [PK_tblLocation] PRIMARY KEY CLUSTERED 
(
[Location] ASC 
) 

Merci pour toute aide. Javid

+2

Vous ** ne voulez pas ** avoir un 'VARCHAR (255)' comme clé de clustering - croyez-moi !! Lisez [article de blog de Kimberly Tripp] (http://www.sqlskills.com/BLOGS/KIMBERLY/post/Ever-increasing-clustering-key-the-Clustered-Index-Debateagain!.aspx) sur ce que devrait être une bonne clé de clustering be - un point est ** étroit ** - INT (4 octets) est génial, BIGINT (8 octets) est OK, GUID (16 octets) peut être tolérable, mais rien de plus - en particulier une colonne de ** largeur variable ** - est la folie. –

+0

Très vrai, et j'espère qu'il peut le changer. Mais combien de postes de SO avez-vous vu cela (peut-être éventuellement) dire "Je sais que la structure est nulle, mais je ne peux pas le changer" ...? –

+0

@Philip Kelley: trop - mais souvent je me demande si le gars ne peut vraiment pas changer la structure - ou s'il est trop paresseux pour le faire ..... de toute façon ... –

Répondre

1

Vous ne pouvez pas utiliser `ALTER TABLE ... ALTER colonne à modifier à la fois une colonne et une contrainte (ici, la valeur par défaut) en même temps. Vous devez d'abord modifier la colonne, puis modifier la contrainte par défaut. (Vous devrez peut-être d'abord supprimer puis recréer la valeur par défaut.)

+0

Oui , J'utilise la même approche. Je viens de trouver que lorsque je modifie une colonne qui a déjà une contrainte par défaut, je n'ai pas besoin de rajouter la valeur par défaut, lorsque la colonne est modifiée. – user320587

1

Le problème est lié à la syntaxe SQL dans votre deuxième instruction ALTER TABLE.

Lorsque vous modifiez une valeur par défaut, vous devez spécifier un nom de contrainte:

ALTER TABLE [tblLocation] 
ADD CONSTRAINT DF_tblLocation_Location DEFAULT 'New Location' FOR Location 

(. Je ne sais pas pourquoi je suppose qu'il est juste que l'CREATE modifie la syntaxe TABLE de la syntaxe ALTER TABLE.)

Toutefois, cela n'a pas de sens d'avoir une valeur par défaut sur une colonne de clé primaire ...

Questions connexes