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?
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.
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.
ALTER TABLE tablename
ALTER COLUMN columnname columndatatype(size)
Remarque: s'il y a une taille de colonnes, écrivez simplement la taille également.
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.
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)
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
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;
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 ...