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

如何查找存储过程的必填参数及记录其参数默认值的系统视图?

在SQL Server中查找存储过程参数及默认值

嘿,这个问题我熟!在SQL Server里,要找存储过程的参数和默认值,主要靠系统视图和几个实用的方法,我给你拆解清楚:

一、用系统视图sys.parameters精准查询

这是最灵活的方式,能自定义输出你需要的所有信息。sys.parameters记录了所有模块(存储过程、函数等)的参数细节,配合sys.objects过滤出存储过程即可。

查询示例(针对你的存储过程)

SELECT 
    obj.name AS 存储过程名称,
    param.name AS 参数名称,
    type_name(param.system_type_id) AS 参数类型,
    CASE WHEN param.has_default_value = 1 THEN '是' ELSE '否' END AS 是否有默认值,
    -- 根据参数类型转换二进制的默认值
    CASE WHEN param.has_default_value = 1 THEN 
        CASE type_name(param.system_type_id)
            WHEN 'bigint' THEN CAST(param.default_value AS BIGINT)
            WHEN 'tinyint' THEN CAST(param.default_value AS TINYINT)
            WHEN 'varchar' THEN CAST(param.default_value AS VARCHAR(MAX))
            -- 其他类型(如int、datetime等)可以按需添加转换逻辑
            ELSE CONVERT(VARCHAR(MAX), param.default_value)
        END
    ELSE NULL END AS 默认值,
    CASE WHEN param.is_nullable = 1 THEN '允许为空' ELSE '不允许为空' END AS 是否允许为空
FROM 
    sys.parameters param
JOIN 
    sys.objects obj ON param.object_id = obj.object_id
WHERE 
    obj.type = 'P' -- 只筛选存储过程
    AND obj.name = '你的存储过程名称' -- 替换成实际的存储过程名
ORDER BY 
    param.parameter_id;

关键字段说明

  • has_default_value:直接判断参数是否有默认值——1代表有(比如你的@B、@C),0代表没有(也就是必填项,比如你的@A)。
  • default_value:存储的是默认值的二进制形式,所以必须根据参数类型做转换,上面的例子覆盖了你提到的几种类型,其他类型可以自行扩展转换逻辑。
  • is_nullable:辅助判断参数是否允许为空,和是否必填不完全等价(比如无默认值但允许为空的参数,调用时可以传NULL),但能帮你更全面了解参数规则。

如果要批量查看所有存储过程的参数,去掉WHERE子句里的obj.name = '你的存储过程名称'即可。

二、用系统存储过程sp_help快速查看

如果只是临时查看单个存储过程的参数,sp_help更直观,执行后直接返回格式化的结果:

EXEC sp_help '你的存储过程名称';

结果集中的「参数」部分会清晰列出参数名、类型、默认值(如果存在),适合快速排查。

针对你给出的存储过程示例,不管用哪种方法,都能明确看到@A是必填项,@B默认值为2,@C默认值为'test'。

内容的提问来源于stack exchange,提问作者gotqn

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 03:32:42