开发者

How to reflect on SQL Server sps and funcs using sys tables?

Where do I look in Microsof开发者_C百科t SQL Server system tables to find info about the parameters a builtin stored procedure or function takes?


Looks like a join on sys.system_objects and sys.system_paramters will do it. This should get you started:

SELECT ob.object_id, ob.name, ob.is_ms_shipped, ob.type_desc, pa.*
 from sys.system_objects ob
  inner join sys.all_parameters pa
   on pa.object_id = ob.object_id

Reset with the columns you're interested in and you should be good.

Make it a left outer join to pick up objects that have no parameters.


Here is sql Function that returns parameter info of a given routine

    ALTER     Function [dbo].[ftRoutineSchema](@RoutineName varchar(200)) returns table as return 
--declare @routineName varchar(100);select @routineName='ftDetailsOfLogin'
SELECT   ColumnName=Case Is_Result
                                    When 'YES' then '@RC'
                                  else Parameter_Name
                            end
            ,DataType= case Data_Type
                            When  'DECIMAL' then 'Decimal('+convert(varchar,Numeric_precision)+','+Convert(varchar,Numeric_scale)+')'
                            When  'numeric' then 'Decimal('+convert(varchar,Numeric_precision)+','+Convert(varchar,Numeric_scale)+')'
                            when 'varchar' then 'Varchar('+Convert(varchar,Character_maximum_length)+')'
                            ELSE dATA_TYPE      
                          end
            ,ColumnOrder=Ordinal_Position   
            ,Direction =Case Parameter_Mode
                                when 'INOUT' then 'Out'
                                else Parameter_Mode
                            end

 FROM  --INFORMATION_SCHEMA.ROUTINE_cOLUMNS
         Information_schema.Parameters  
--WHERE TABLE_NAME=@routineName --order by columnorder
  Where Specific_name=@ROUTINEnAME
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜