web-dev-qa-db-fra.com

Comment changer le type de données de la colonne dans la base de données SQL sans perdre de données

J'ai une base de données SQL Server et je viens de me rendre compte que je peux changer le type d'une des colonnes de int à bool

Comment puis-je faire cela sans perdre les données déjà entrées dans cette table? 

169
Ivan Stoyanov

Vous pouvez facilement le faire en utilisant la commande suivante. Toute valeur de 0 sera transformée en 0 (BIT = false), toute autre valeur sera transformée en 1 (BIT = true).

ALTER TABLE dbo.YourTable
   ALTER COLUMN YourColumnName BIT

L’autre option serait de créer une nouvelle colonne de type BIT, de la remplir à partir de l’ancienne colonne et, une fois que vous avez terminé, supprimez l’ancienne colonne et renommez la nouvelle en son ancien nom. De cette façon, si quelque chose se passe pendant la conversion, vous pouvez toujours revenir en arrière car vous avez toujours toutes les données.

289
marc_s

Si c'est un changement valide.

vous pouvez changer la propriété.

Outils -> Options -> Concepteurs -> Concepteurs de tables et de bases de données -> Décocher -> Empêcher l'enregistrement des modifications nécessitant la recréation de tables.

Maintenant, vous pouvez facilement changer le nom de la colonne sans recréer la table ni perdre vos enregistrements.

14
Sathish
ALTER TABLE tablename
ALTER COLUMN columnname columndatatype(size)

Remarque: s'il y a une taille de colonnes, écrivez simplement la taille également.

11
Xyed Xain Haider

Pourquoi pensez-vous que vous allez perdre des données? Allez simplement dans Management Studio et changez le type de données. Si la valeur existante peut être convertie en bool (bit), cela se fera. En d'autres termes, si "1" correspond à vrai et "0" à faux dans votre champ d'origine, tout ira bien.

7
Philippe Leybaert

Allez à Tool-Option-designers-Table et aux concepteurs de base de données et décochez Eviter l'option d'enregistrement  enter image description here

3

si vous utilisez T-SQL (MSSQL); vous devriez essayer ce script:

ALTER TABLE [Employee] ALTER COLUMN [Salary] NUMERIC(22,5)

si vous utilisez MySQL; vous devriez essayer ce script:

ALTER TABLE [Employee] MODIFY COLUMN [Salary] NUMERIC(22,5)

si vous utilisez Oracle; vous devriez essayer ce script:

ALTER TABLE [Employee] MODIFY [Salary] NUMERIC(22,5)
3
NullException

Modifier le type de données de la colonne avec le type de contrôle de la colonne:

IF EXISTS(
       SELECT 1
       FROM   sys.columns
       WHERE  NAME = 'YourColumnName'
              AND [object_id] = OBJECT_ID('dbo.YourTable')
              AND TYPE_NAME(system_type_id) = 'int'
   )
    ALTER TABLE dbo.YourTable ALTER COLUMN YourColumnName BIT
1
Ebrahim Sabeti

pour moi, dans le serveur SQL 2016, je le fais comme ça

* Pour renommer la colonne Column1 en colonne2 

EXEC sp_rename 'dbo.T_Table1.Column1', 'Column2', 'COLUMN'

* Pour modifier le type de colonne de string à int :( Assurez-vous que les données sont au format correct )

ALTER TABLE dbo.T_Table1 ALTER COLUMN Column2  int; 
0
MNF

Dans l'édition compacte, la taille prendra automatiquement la taille pour le type de données datetime, c'est-à-dire (8). Inutile de définir la taille du champ et de générer une erreur pour cette opération ...

0
Hardik