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

存储过程ROHAN_GetPKList报错:未提供参数@char_id求解决

解决存储过程调用参数缺失错误:procedure or function 'ROHAN_GetPKList' expects parameter '@char_id' which was not supplied

这个错误非常典型,本质就是你调用ROHAN_GetPKList存储过程时,没有给它要求的必填参数@char_id传值,SQL Server自然会抛出这个提示。下面给你两种针对性的解决思路:

方法一:调用时显式传入@char_id参数(推荐,符合原存储过程设计)

不管你是在SSMS里手动执行,还是在应用代码中调用,都必须明确传递这个参数。

  • SSMS手动执行示例:
-- 把123替换成你实际要查询的角色ID值
EXEC ROHAN_GetPKList @char_id = 123;
  • 应用代码示例(以C#为例):
using (SqlConnection conn = new SqlConnection("你的数据库连接字符串"))
{
    conn.Open();
    SqlCommand cmd = new SqlCommand("ROHAN_GetPKList", conn);
    cmd.CommandType = CommandType.StoredProcedure;
    // 添加参数并赋值,替换成你的实际角色ID变量
    cmd.Parameters.AddWithValue("@char_id", targetCharId);
    
    // 执行查询并处理结果
    using (SqlDataReader reader = cmd.ExecuteReader())
    {
        while (reader.Read())
        {
            // 读取数据逻辑
        }
    }
}

方法二:给参数设置默认值(仅当业务允许时使用)

如果你的业务场景中存在不需要指定char_id就能查询的需求(比如查询所有PK记录),可以修改存储过程,给@char_id设置默认值,并调整查询逻辑适配这种情况:

ALTER procedure [dbo].[ROHAN_GetPKList] 
    @char_id int = NULL -- 设置默认值为NULL
as 
set nocount on 
select top 100 k.pk_char_id, c.[name], k.pk_char_type, k.pk_second, k.isKill, k.PKRecall, k.RecallRecharge, k.mode_type 
from TKill k
join TCharacter c on k.pk_char_id = c.[id] 
-- 新增OR条件,当@char_id为NULL时查询所有符合条件的记录
where (k.char_id = @char_id OR @char_id IS NULL) 
and c.[user_id] > 0 
order by k.[date] 
return @@error

⚠️ 注意:这个修改要严格匹配你的业务逻辑,如果@char_id是必须的查询条件,不要使用这个方法,否则会导致查询结果不符合预期。

最后再提醒一句:检查你的调用代码,确认是不是漏加了参数,或者参数名拼写错误(比如把@char_id写成@charId,虽然SQL Server不区分大小写,但参数名必须完全一致)。

内容的提问来源于stack exchange,提问作者Kwaran Ungaran Barat

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:43:46