查询存储过程的参数信息的SQL语句

declare @SchemaName nvarchar(50)
set @SchemaName='dbo'
declare @CommandName nvarchar(50)
set @CommandName='spName'

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 smallint) AS [PARAMETER_TYPE],
                0 AS [PARAMETER_HASDEFAULT],
                NULL AS [PARAMETER_DEFAULT],
                CAST(0 AS bit) AS [IS_NULLABLE],
                0 AS [DATA_TYPE],
                NULL AS [CHARACTER_MAXIMUM_LENGTH],
                NULL AS [CHARACTER_OCTET_LENGTH],
                CAST(10 AS smallint) AS [NUMERIC_PRECISION],
                CAST(NULL AS smallint) AS [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 smallint) AS [PARAMETER_TYPE],
                0 AS [PARAMETER_HASDEFAULT],
                NULL AS [PARAMETER_DEFAULT],
                CAST(1 AS bit) AS [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 int) AS [CHARACTER_MAXIMUM_LENGTH],
                NULL AS [CHARACTER_OCTET_LENGTH],
                CAST(param.precision AS smallint) AS [NUMERIC_PRECISION],
                CAST(param.scale AS smallint) AS [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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值