Sql server 2005 是什么原因引起的;附近语法不正确<;存储过程名称>&引用;在EF代码优先和SQL 2005中?

Sql server 2005 是什么原因引起的;附近语法不正确<;存储过程名称>&引用;在EF代码优先和SQL 2005中?,sql-server-2005,entity-framework,stored-procedures,ef-code-first,code-first,Sql Server 2005,Entity Framework,Stored Procedures,Ef Code First,Code First,我发现的System.Data.Entity.Database.SqlQuery方法的示例似乎适用于SQL 2008 R2,但不适用于SQL 2005 此调用将与SQL 2008 R2一起使用: var myEntities = dbContext.Database.SqlQuery<MyEntity>("GetDataFromMySp @EntityId = {0}", entityId); var myEntities=dbContext.Database.SqlQuery(“

我发现的System.Data.Entity.Database.SqlQuery方法的示例似乎适用于SQL 2008 R2,但不适用于SQL 2005

此调用将与SQL 2008 R2一起使用:

var myEntities = dbContext.Database.SqlQuery<MyEntity>("GetDataFromMySp @EntityId = {0}", entityId);
var myEntities=dbContext.Database.SqlQuery(“GetDataFromMySp@EntityId={0}”,EntityId);

但是,在SQL 2005中,此语句将抛出一个SqlException,并显示一条错误消息“GetDataFromMySp”附近语法不正确。

由@Dan自己找到的解决方案(由于rep原因无法发布)

我发现解决这个问题的方法是简单地在查询中添加关键字“EXEC”:

var myEntities = dbContext.Database.SqlQuery<MyEntity>("EXEC GetDataFromMySp @EntityId = {0}", entityId);
var myEntities=dbContext.Database.SqlQuery(“EXEC GetDataFromMySp@EntityId={0}”,EntityId);

此解决方案修复了SQL Server 2005的问题,并且仍然适用于SQL Server 2008 R2。

只有在批处理中“GetDataFromMySp”之前有任何语句时,才需要EXEC。 存储过程名称本身应该是OK

我会运行SQL分析器来查看EF实际发送的内容

像“准备好的语句”这样的东西,除了命令文本之外,还会作为批处理的一部分发出额外的命令


请参见:

如果您找到了答案,您可以自己发布答案并进行标记,因此它仍然适用于将来可能面临相同问题的其他人的参考。@PedroC88-我收到一个错误,说明我的代表太低,无法立即发布答案,并且我必须等待8小时。请随意张贴答案。:)这是一个星期天:一周中最安静的一天。问题已经5分钟了。您现在可以删除问题的答案。我不反对您的观点,但事实是:1)Database.SqlQuery w/o EXEC在SQL 2008 R2中工作,但不是SQL 2005 2)将“EXEC”添加到语句修复了SQL 2005,并没有破坏SQL 2008。我还没有分析这个b/c,它发生在一个受控的测试环境中,这需要我寻求另一个团队的帮助来分析。如果我找到时间,我会在我的虚拟环境中重新创建它并发布跟踪。添加EXEC不会破坏任何东西。这意味着在存储过程调用之前,会为SQL Server 2005发送一些不适用于SQL Server 2008+的额外命令。正如我所说,这就是SQL解析批处理的方式。区别在于EF,而不是SQL Server,它的表现与预期的一样。。。