如何为 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。
我有以下语句在使用 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。