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

How to fix SqlException incorrect syntax near @p0 for Delete Top n command

我有以下语句在使用 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);
}

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

System.Data.SqlClient.SqlException: Incorrect syntax near @p0.

我反复检查 ExecuteStoreCommand 的语法,没有发现任何错误。

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

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

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

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

"SQL Server requires you to place parenthesis around the argument to TOP" 如果将其作为参数传递。

所以有效的代码是:

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

谢谢,Andomar