2012-12-18 5 views
0

Je dois modifier le type de données d'une colonne dans SQL Server. Alors, quelles sont les contraintes à faire?Modification du type de données de colonne dans SQL Server

Je sais que je dois supprimer l'index et d'autres contraintes?

Dois-je supprimer non null check?

Quelles autres choses dois-je vérifier avant de modifier le type de données?

Je dois supprimer les contraintes et modifier la table, puis ajouter à nouveau les contraintes.

Est-ce la bonne façon de le faire?

DROP INDEX UX_1_COMPUTATION ON dbo.Computation 

ALTER TABLE dbo.Computation 
ALTER COLUMN ComputationID NVARCHAR(25) 

CREATE UNIQUE INDEX UX_1_COMPUTATION ON dbo.Computation (ComputationID); 

Ici UX_1_COMPUTATION est le nom d'index unique, Computation est le nom de la table et ComputationID est le nom de la colonne.

Est-ce correct?

Update

Donc, s'il y a un composite index où il y a plus d'une colonne impliqués, Comment je traite avec elle? Ces index contiennent une colonne de clé primaire avec des colonnes de clé non primaire.

Lorsque j'ai essayé d'exécuter l'instruction suivante

DROP INDEX UX_2_COMPUTATION ON dbo.Computation 

ALTER TABLE dbo.Computation 
ALTER COLUMN ComputationID NVARCHAR(25) 

CREATE UNIQUE INDEX UX_2_COMPUTATION ON dbo.Computation (ComputationID , ComputeGuid); 

Il jette l'exception suivante

SQL DROP INDEX UX_2_COMPUTATION

 ON dbo.Computation 

     ALTER TABLE dbo.Computation 

     ALTER COLUMN ComputationID NVARCHAR(10) Not Null 

     CREATE INDEX UX_2_COMPUTATION 

     ON dbo.Computation (ComputationID , ComputeGuid): The object 

'PK_Computation' is dependent on column 'ComputationID '.: 

     Caused By: Error executing SQL DROP INDEX UX_2_COMPUTATION 

     ON dbo.Computation 

     ALTER TABLE dbo.Computation 

     ALTER COLUMN ComputationID NVARCHAR(10) Not Null 

     CREATE INDEX UX_2_COMPUTATION 

     ON dbo.Computation (ComputationID , ComputeGuid): The object 

'PK_Computation' is dependent on column 'ComputationID '.: 

     Caused By: The object 'PK_Computation' is dependent on column 'ComputationID '. 

Merci,

-Sam

+1

Il serait utile de savoir ce que vous devez changer de et quoi? Quel est le type avant - qu'est-ce que c'est censé être après? Cette modification va créer une colonne NVARCHAR (25) '** Nullable ** - c'est ce que vous voulez? –

+0

@marc_sIts une colonne non nulle. J'ai besoin de créer une colonne non null – Sam

+0

Donc, il devrait être comme 'ALTER TABLE dbo.Computation ALTER COLUMN ComputationID NVARCHAR (25) Non null' droite? et il n'y a pas de problème avec la syntaxe de l'index? – Sam

Répondre

2

Votre instruction actuelle changera la colonne en colonne NVARCHAR(25) Nullable - est-ce que vous voulez?

Si vous voulez être sûr que votre colonne va être NON NULL, vous devez indiquer explicitement ceci:

ALTER TABLE dbo.Computation 
ALTER COLUMN ComputationID NVARCHAR(25) NOT NULL 
+4

Pour les colonnes ** créées **, la valeur par défaut si elle n'est pas spécifiée dépend de 'SET ANSI_NULL_DFLT_ON' et de l'option de base de données" ANSI null default ". Pour les colonnes modifiées, si elles ne sont pas spécifiées, elles seront toujours 'NULL' même si à l'origine elles étaient' NOT NULL' –

+0

@MartinSmith: merci pour la mise à jour - toujours bon d'avoir aussi vos conseils de niveau gourou! :-) –

Questions connexes