Comment corriger la syntaxe incorrecte de SqlException près de @ p0 pour la command Delete Top n

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 .