web-dev-qa-db-fra.com

Pourquoi ne puis-je pas utiliser un alias dans une instruction DELETE?

Dans SQL Server Compact Edition dans Visual Studio 2010 (peut-être SQL Server et SQL en général, je ne sais pas), cette commande fonctionne:

DELETE FROM foods WHERE (name IN ('chickens', 'rabbits'))

mais cette commande produit une erreur de: Error near identifier f. Expecting OUTPUT.

DELETE FROM foods f WHERE (f.name IN ('chickens', 'rabbits'))
133
Ricardo Altamirano

Pour aliaser la table, il faudrait dire:

DELETE f FROM dbo.foods AS f WHERE f.name IN (...);

Je ne vois pas l’intérêt de créer un alias pour cette instruction spécifique DELETE, d’autant plus que (du moins IIRC), cela n’est plus conforme à la norme ANSI stricte. Mais oui, comme le suggèrent les commentaires, cela peut être nécessaire pour d’autres formes de requête (par exemple, la corrélation).

203
Aaron Bertrand

L'instruction delete a une syntaxe étrange. Ça va comme ça:

DELETE f FROM foods f WHERE (f.name IN ('chickens', 'rabbits'))
65
usr