一个用于返回所有存储过程及其参数的T-SQL

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

SET

 

 

NOCOUNT

ON

------the max length of the parameters, using to format parameters-----------

DECLARE

 

 

@MaxParamLen

INT

SET

 

 

@MaxParamLen =

20

-----display parameters in upper case or not-----------------------------

DECLARE

 

 

@UpperParamType

BIT

SET

 

 

@UpperParamType =

1

--------the table variable to save stored procedures with parameters------------------------

DECLARE

 

 

@SPTable

TABLE

(

 

 

Id INT IDENTITY PRIMARY KEY ,

SPName

 

SYSNAME

,

ParameterName

 

SYSNAME

,

ParameterType

 

SYSNAME

,

Parameterlength

 

INT

)

 

---------insert stored procedures with parameters---------------------------------

INSERT

 

 

INTO @SPTable ( SPName , ParameterName , ParameterType , Parameterlength

)

SELECT

 

 

o . Name , CHAR ( 9 )+ p . Name , t . Name , p .

max_length

FROM

 

 

sys.objects

o

 

 

INNER JOIN sys.parameters p ON o . object_id = p .

object_id

 

 

INNER JOIN sys.types t ON p . system_type_id = t .

user_type_id

WHERE

 

 

Type =

'P'

ORDER

 

 

BY o .

Name

-------------set max parameter length-----------------------------

SET

 

 

@MaxParamLen =( SELECT MAX ( LEN ( LTRIM ( RTRIM ( ParameterName )))) FROM @SPTable )+

2

-----------set parameter type to upper case-------------------------------------

IF

 

 

@UpperParamType =

1

UPDATE

 

 

@SPTable

SET

 

 

ParameterType = UPPER ( ParameterType

)

-------------------set the length of --NCHAR and NVARCHAR to its half --------------------------------------

UPDATE

 

 

@SPTable

SET

 

 

Parameterlength = Parameterlength /

2

WHERE

 

 

ParameterType in ( 'nchar' , 'nvarchar'

)

-----------set parameter length to null for int type and so on-------------------------------------

UPDATE

 

 

@SPTable

SET

 

 

Parameterlength

=null

WHERE

 

 

ParameterType in ( 'binary' , 'varbinary' , 'int' , 'bigint' , 'samllint' , 'bit' , 'image' , 'ntext' , 'uniqueidentifier' , 'datetime' , 'smalldatetime'

)

------------add length to parameter type ---------------------------------

UPDATE

 

 

@SPTable

SET

 

 

ParameterType = ParameterType

+

case

 

 

when Parameterlength IS NULL THEN ',' ELSE '(' + CONVERT ( VARCHAR ( 5 ), Parameterlength )+ '),' END

-------------add space after parameter name to format parameters------------------------------------

UPDATE

 

 

@SPTable

SET

 

 

ParameterName = ParameterName + REPLICATE ( ' ' , @MaxParamLen - LEN ( ParameterName

))

WHERE

 

 

LEN ( ParameterName )<

@MaxParamLen

-------------remove the comma from the last parameter--------------------------------------------------

UPDATE

 

 

sp

SET

 

 

ParameterType = SUBSTRING ( ParameterType , 1 , LEN ( ParameterType )- 1

)

FROM

 

 

@SPTable sp

 

 

INNER JOIN ( SELECT SPName , MAX ( Id )

Id

 

 

FROM

@SPTable

 

 

GROUP BY SPName )

lp

 

 

ON sp . Id = lp .

Id

-------------add '(' to the first parameter------------------------------------------------------------------------

UPDATE

 

 

sp

SET

 

 

ParameterName = '(' + CHAR ( 13 )+

ParameterName

FROM

 

 

@SPTable sp

 

 

INNER JOIN ( SELECT SPName , MIN ( Id )

Id

 

 

FROM

@SPTable

 

 

GROUP BY SPName )

lp

 

 

ON sp . Id = lp .

Id

 

-------------add ')' to the last parameter------------------------------------------------------------------------

UPDATE

 

 

sp

SET

 

 

ParameterType = ParameterType + CHAR ( 13 )+

')'

FROM

 

 

@SPTable sp

 

 

INNER JOIN ( SELECT SPName , MAX ( Id )

Id

 

 

FROM

@SPTable

 

 

GROUP BY SPName )

lp

 

 

ON sp . Id = lp .

Id

---------------clear the repeated stored procedure names from @SPTable--------------------------------------

UPDATE

 

 

sp

SET

 

 

SPName =

''

FROM

 

 

@SPTable sp

 

 

INNER JOIN ( SELECT SPName , MIN ( Id )

Id

 

 

FROM

@SPTable

 

 

GROUP BY SPName )

fp

 

 

ON sp . SPName = fp . SPName and sp . Id > fp .

Id

-------------add 'Tab' to the beginning of parameter names-------------------------------------------------------

UPDATE

 

 

sp

SET

 

 

SPName = CHAR ( 13 )+

SPName

FROM

 

 

@SPTable sp

WHERE

 

 

SPName <>

''

--------show the result of stored procedures-it is recommanded to show the result in text mode---------------------

SELECT

 

 

SPName + ParameterName +

ParameterType

FROM

 

 

@SPTable

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值