如何修复 @p0 附近删除 Top n 命令的 SqlException 语法不正确

Posted

技术标签:

【中文标题】如何修复 @p0 附近删除 Top n 命令的 SqlException 语法不正确【英文标题】:How to fix SqlException incorrect syntax near @p0 for Delete Top n command 【发布时间】:2015-11-03 21:14:12 【问题描述】:

我有以下语句在使用 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的语法,没有发现任何错误。

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

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

【参考方案2】:

当从 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。

【讨论】:

以上是关于如何修复 @p0 附近删除 Top n 命令的 SqlException 语法不正确的主要内容,如果未能解决你的问题,请参考以下文章

Spring数据Jpa findTop和findFirst生成错误'@P0'附近的语法不正确

如何修复 c3p0 连接池初始化异常?

服务器命令

Linux常用命令_top

top的Top命令

linux top命令