J'ai l'instruction suivante qui échoue dans un programme C # utilisant LINQ to Entity Framework 4:
int top = 1000; ssortingng name = "StagingTable"; using (var context = CreateObjectContext()) { int count = context.ExecuteStoreCommand(ssortingng.Concat("DELETE TOP {0} FROM ", name), top); }
Le context est créé correctement (utilisé dans d'autres parties du programme) et le nom de la table est épelé correctement. Selon la documentation de Microsoft, cela devrait fonctionner pour supprimer un nombre maximum d'loggings de la table, mais à la place triggers une exception:
System.Data.SqlClient.SqlException: syntaxe incorrecte près de @ p0.
J'ai vérifié et revérifié la syntaxe de l' ExecuteStoreCommand
et n'a rien trouvé de faux.
Comment est-il possible d'utiliser la clause TOP
dans une instruction DELETE
comme celle-ci?
Lorsque vous passez un paramètre à TOP
vous devez le placer entre parenthèses:
int count = context.ExecuteStoreCommand(ssortingng.Concat("DELETE TOP ({0}) FROM ", name), top);
J'ai trouvé une réponse dans un article similaire mais non apparenté ( MS SQL Exception: syntaxe incorrecte près de '@ P0' ) quand une SELECT TOP
été exécutée à partir de Java.
"SQL Server vous oblige à placer des parenthèses autour de l'argument à TOP
" si vous le passez en argument.
Donc, le code qui fonctionne est:
int top = 1000; ssortingng name = "StagingTable"; using (var context = CreateObjectContext()) { int count = context.ExecuteStoreCommand(ssortingng.Concat("DELETE TOP ({0}) FROM ", name), top); }
Merci, Andomar .