J'essaie de faire ceci:
ALTER TABLE CompanyTransactions DROP COLUMN Created
Mais je comprends ceci:
Msg 5074, niveau 16, état 1, ligne 2 L'objet 'DF__CompanyTr__Creat__0CDAE408' dépend de la colonne 'Créé'. Msg 4922, niveau 16, état 9, ligne 2 ALTER TABLE COLUMN DROP Créé a échoué car un ou plusieurs objets accèdent à cette colonne.
Ceci est une première table de code. D'une manière ou d'une autre, les migrations sont devenues complètement gâchées et j'essaie de restaurer manuellement certaines modifications.
J'ai non idée de quoi il s'agit:
DF__CompanyTr__Creat__0CDAE408
Vous devez supprimer le constraints
de la colonne avant de supprimer la colonne. Le nom que vous référencez est un default constraint
.
par exemple.
alter table CompanyTransactions drop constraint [df__CompanyTr__Creat__0cdae408];
alter table CompanyTransactions drop column [Created];
La réponse de @ SqlZim est correcte, mais juste pour expliquer pourquoi cela est probablement arrivé. J'ai eu un problème similaire et cela était dû à une chose très innocente: ajouter une valeur par défaut à une colonne
ALTER TABLE MySchema.MyTable ADD
MyColumn int DEFAULT NULL;
Mais dans le domaine de MS SQL Server, une valeur par défaut sur une colonne est un CONSTRAINT. Et comme chaque contrainte, il a un identifiant. Et vous ne pouvez pas supprimer une colonne si elle est utilisée dans un CONTRAINT.
Donc, ce que vous pouvez réellement faire pour éviter ce genre de problèmes est toujours de donner à vos contraintes par défaut un nom explicite, par exemple:
ALTER TABLE MySchema.MyTable ADD
MyColumn int NULL,
CONSTRAINT DF_MyTable_MyColumn DEFAULT NULL FOR MyColumn;
Vous devrez toujours supprimer la contrainte avant de supprimer la colonne, mais vous devrez au moins, connaître son nom à l’avance.
Comme déjà écrit dans les réponses, vous devez supprimer les contraintes (créées automatiquement par SQL) liées à toutes les colonnes que vous essayez de supprimer.
Effectuer les étapes suivantes pour faire le nécessaire.
exec sp_helpconstraint '<your table name>'
alter table <your_table_name> drop constraint <constraint_name_that_you_copied_in_1>
(ce sera un format similaire ou similaire).Alter table <YourTableName> Drop column column1, column2
etc.Lorsque vous modifiez la colonne datatype
, vous devez modifier constraint key
pour chaque base de données.
alter table CompanyTransactions drop constraint [df__CompanyTr__Creat__0cdae408];
Vous devez faire quelques choses:
-- 1. Remove constraint and drop column
IF EXISTS(SELECT *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = N'TABLE_NAME'
AND COLUMN_NAME = N'LOWER_LIMIT')
BEGIN
DECLARE @sql NVARCHAR(MAX)
WHILE 1=1
BEGIN
SELECT TOP 1 @sql = N'alter table [TABLE_NAME] drop constraint ['+dc.name+N']'
FROM sys.default_constraints dc
JOIN sys.columns c
ON c.default_object_id = dc.object_id
WHERE dc.parent_object_id = OBJECT_ID('[TABLE_NAME]') AND c.name = N'LOWER_LIMIT'
IF @@ROWCOUNT = 0
BEGIN
PRINT 'DELETED Constraint on column LOWER_LIMIT'
BREAK
END
EXEC (@sql)
END;
ALTER TABLE TABLE_NAME DROP COLUMN LOWER_LIMIT;
PRINT 'DELETED column LOWER_LIMIT'
END
ELSE
PRINT 'Column LOWER_LIMIT does not exist'
GO