You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

EF Core调用SQL Server存储过程报错:@p1附近存在语法错误

问题根本原因

  1. 存储过程参数未加分隔逗号:你在FromSqlInterpolated的插值字符串中,三个参数之间仅用空格分隔,没有加逗号,导致EF Core生成的SQL语句中@p0 @p1 @p2三个参数直接连写,不符合SQL语法要求,这是触发@p1附近语法错误的直接原因。
  2. 参数类型不匹配:存储过程定义的@StartDate和@EndDate为datetime2类型,但你当前传入的是字符串类型,EF Core会自动将其映射为nvarchar类型,可能引发隐式转换报错或性能损耗。
  3. 缺少存储过程调用前缀:调用存储过程时建议显式加上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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 23:36:02