EF Core调用SQL Server存储过程报错:@p1附近存在语法错误
问题根本原因
- 存储过程参数未加分隔逗号:你在
FromSqlInterpolated的插值字符串中,三个参数之间仅用空格分隔,没有加逗号,导致EF Core生成的SQL语句中@p0 @p1 @p2三个参数直接连写,不符合SQL语法要求,这是触发@p1附近语法错误的直接原因。 - 参数类型不匹配:存储过程定义的
@StartDate和@EndDate为datetime2类型,但你当前传入的是字符串类型,EF Core会自动将其映射为nvarchar类型,可能引发隐式转换报错或性能损耗。 - 缺少存储过程调用前缀:调用存储过程时建议显式加上
EXEC前缀和所属Schema(这里是dbo),避免SQL Server解析异常。
修复方案
修改你的EF Core调用代码如下:
public async Task<List<SummaryTableEntity>> GetSummaries(string startDate, string endDate, string accountName) { // 将字符串日期转换为DateTime类型,匹配存储过程的datetime2参数定义 DateTime startDateTime = DateTime.Parse(startDate); DateTime endDateTime = DateTime.Parse(endDate); return await _dbContext.SummaryTableEntities // 增加EXEC前缀、Schema名,参数之间加逗号分隔 .FromSqlInterpolated($"EXEC dbo.sprocGetDataForSummaryTable {startDateTime}, {endDateTime}, {accountName}") .ToListAsync(); }
修复后EF Core生成的SQL会自动在参数之间添加逗号,同时参数类型匹配存储过程定义,即可解决语法报错问题。
内容的提问来源于stack exchange,提问作者Rade Tomovic
相关产品推荐
相关产品推荐

