如何在@p0附近为Delete Top n命令修复SqlException错误语法

时间:2015-11-03 21:14:12

标签: c# sql-server entity-framework-4

我使用LINQ to Entity Framework 4在C#程序中失败了以下语句:

int top = 1000;
string name = "StagingTable";

using (var context = CreateObjectContext())
{
    int count = context.ExecuteStoreCommand(string.Concat("DELETE TOP {0} FROM ", name), top);
}

正确创建上下文(在程序的其他部分中使用),并且表名拼写正确。根据Microsoft文档,这应该可以从表中删除最大数量的记录,但会引发异常:

  

System.Data.SqlClient.SqlException:@ p0附近的语法不正确。

我检查并重新检查ExecuteStoreCommand的语法,但找不到任何错误。

如何在这样的TOP语句中使用DELETE子句?

2 个答案:

答案 0 :(得分:4)

将参数传递给TOP时,需要将其括在括号中:

int count = context.ExecuteStoreCommand(string.Concat("DELETE TOP ({0}) FROM ", name), top);

答案 1 :(得分:0)

当从Java执行SELECT TOP语句时,我在类似但不相关的帖子(MS SQL Exception: Incorrect syntax near '@P0')中找到了答案。

" SQL Server要求您在TOP"的参数周围放置括号。如果你把它作为一个参数传递。

所以有效的代码是:

int top = 1000;
string name = "StagingTable";
using (var context = CreateObjectContext())
{
    int count = context.ExecuteStoreCommand(string.Concat("DELETE TOP ({0}) FROM ", name), top);
}

谢谢,Andomar