J'ai essayé ce qui suit mais j'ai eu une erreur de syntaxe
ALTER TABLE Grades (
DROP COLUMN (Student_FamilyName, Student_Name),
ADD Student_id INT );
Est-il possible d'effectuer un DROP
et un ADD
dans le même ALTER TABLE
déclaration?
Si vous regardez le ALTER TABLE SYTAX
tu verras ça
ALTER TABLE [ database_name . [ schema_name ] . | schema_name . ] table_name
{
ALTER COLUMN column_name
{
[ type_schema_name. ] type_name [ ( { precision [ , scale ]
| max | xml_schema_collection } ) ]
[ COLLATE collation_name ]
[ NULL | NOT NULL ] [ SPARSE ]
| {ADD | DROP }
{ ROWGUIDCOL | PERSISTED | NOT FOR REPLICATION | SPARSE }
}
| [ WITH { CHECK | NOCHECK } ]
| ADD
{
<column_definition>
| <computed_column_definition>
| <table_constraint>
| <column_set_definition>
} [ ,...n ]
| DROP
{
[ CONSTRAINT ]
{
constraint_name
[ WITH
( <drop_clustered_constraint_option> [ ,...n ] )
]
} [ ,...n ]
| COLUMN
{
column_name
} [ ,...n ]
} [ ,...n ]
Cela peut être réduit à
ALTER TABLE { ALTER COLUMN column_name | ADD | DROP }
Selon Conventions de syntaxe Transact-SQL (Transact-SQL) the | (barre verticale)
Sépare les éléments de syntaxe entre crochets ou accolades. Vous ne pouvez utiliser qu'un seul des éléments.
Vous ne pouvez donc pas modifier, supprimer ou ajouter une seule instruction. Vous avez également les parens et les virgules qui ne fonctionneront pas. Vous aurez donc besoin
ALTER TABLE Grades DROP COLUMN (Student_FamilyName, Student_Name);
ALTER TABLE Grades ADD Student_id INT;
Si vous en avez besoin pour être une action atomique, il vous suffit de terminer la transaction
Dans le cas où votre base de données est Mysql, vous pouvez le faire de cette façon
ALTER TABLE Grades
DROP COLUMN Student_FamilyName,
DROP COLUMN Student_Name,
ADD Student_id INT
Fonctionne dans mysql 5.5.5