• 查询存储过程的参数信息的SQL语句[经过测试]


    测试环境:SQL SERVER 2005

    SQL语句


    declare @SchemaName nvarchar(50)
    set @SchemaName='构架名称,如DBO'
    declare @CommandName nvarchar(50)
    set @CommandName='存储过程名称'

    SELECT
                    
    DB_NAME() AS [PROCEDURE_CATALOG],
                    
    @SchemaName AS [PROCEDURE_SCHEMA],
                    
    NULL AS [PROCEDURE_NAME],
                    
    '@RETURN_VALUE' AS [PARAMETER_NAME],
                    
    0 AS [ORDINAL_POSITION],
                    
    CAST(4 AS smallintAS [PARAMETER_TYPE],
                    
    0 AS [PARAMETER_HASDEFAULT],
                    
    NULL AS [PARAMETER_DEFAULT],
                    
    CAST(0 AS bitAS [IS_NULLABLE],
                    
    0 AS [DATA_TYPE],
                    
    NULL AS [CHARACTER_MAXIMUM_LENGTH],
                    
    NULL AS [CHARACTER_OCTET_LENGTH],
                    
    CAST(10 AS smallintAS [NUMERIC_PRECISION],
                    
    CAST(NULL AS smallintAS [NUMERIC_SCALE],
                    
    NULL AS [DESCRIPTION],
                    
    'int' AS [TYPE_NAME],
                    
    'int' AS [LOCAL_TYPE_NAME]
                
    UNION ALL
                
    SELECT
                    
    DB_NAME() AS [PROCEDURE_CATALOG],
                    SCHEMA_NAME(sp.schema_id) 
    AS [PROCEDURE_SCHEMA],
                    
    NULL AS [PROCEDURE_NAME],
                    param.name 
    AS [PARAMETER_NAME],
                    param.parameter_id 
    AS [ORDINAL_POSITION],
                    
    CAST(CASE WHEN param.is_output = 1 THEN 2 ELSE 1 END AS smallintAS [PARAMETER_TYPE],
                    
    0 AS [PARAMETER_HASDEFAULT],
                    
    NULL AS [PARAMETER_DEFAULT],
                    
    CAST(1 AS bitAS [IS_NULLABLE],
                    
    0 AS [DATA_TYPE],
                    
    CAST(CASE WHEN baset.name IN (N'nchar', N'nvarchar'AND param.max_length <> -1 THEN param.max_length/2 ELSE param.max_length END AS intAS [CHARACTER_MAXIMUM_LENGTH],
                    
    NULL AS [CHARACTER_OCTET_LENGTH],
                    
    CAST(param.precision AS smallintAS [NUMERIC_PRECISION],
                    
    CAST(param.scale AS smallintAS [NUMERIC_SCALE],
                    
    NULL AS [DESCRIPTION],
                    
    ISNULL(baset.name, N''AS [TYPE_NAME],
                    
    ISNULL(baset.name, N''AS [LOCAL_TYPE_NAME]
                
    FROM
                    sys.all_objects 
    AS sp
                    
    INNER JOIN sys.all_parameters AS param ON param.object_id=sp.object_id
                    
    LEFT OUTER JOIN sys.types AS baset ON baset.user_type_id = param.system_type_id and baset.user_type_id = baset.system_type_id
                
    WHERE
                    (sp.type 
    = N'P' OR sp.type = N'RF' OR sp.type='PC')and(sp.name=@CommandName and SCHEMA_NAME(sp.schema_id)=@SchemaName)
                
    ORDER BY
                    
    5 ASC
    修改架构名称和存储过程名称后执行结果类似
    ETMCDB dbo NULL @RETURN_VALUE 0 4 0 NULL 0 0 NULL NULL 10 NULL NULL int int
    ETMCDB dbo NULL @OrderId 1 1 0 NULL 1 0 4 NULL 10 0 NULL int int
    ETMCDB dbo NULL @DetailId 2 1 0 NULL 1 0 4 NULL 10 0 NULL int int
    内容摘自


    ------------------------------------------
    除非特别声明,文章均为原创,版权与博客园共有,转载请保留出处
    BUY ME COFFEE
  • 相关阅读:
    MVC 中创建自己的异常处理
    ajax 跨域解决方法
    值传递,引用传递
    值类型,引用类型 结合 栈,堆的理解
    SQL中 ALL 和 ANY 区别的
    SQL中的逻辑运算符
    使用函数输出两个数的最大值
    九句话,送给正在奋斗的我们,每天读一遍
    C语言函数调用简简介
    优秀项目经理的七个习惯
  • 原文地址:https://www.cnblogs.com/kkun/p/1384381.html
Copyright © 2020-2023  润新知