代码之家  ›  专栏  ›  技术社区  ›  John K

如何使用sys表反映SQL Server SP和函数?

  •  -1
  • John K  · 技术社区  · 14 年前

    在Microsoft SQL Server系统表中,我应该在哪里查找有关内置存储过程或函数所采用参数的信息?

    2 回复  |  直到 14 年前
        1
  •  1
  •   Philip Kelley    14 年前

    看起来像是sys.system_对象上的连接,sys.system_参数将执行此操作。这应该让你开始:

    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
    

    重新设置你感兴趣的列,你应该是好的。

    使其成为左外部联接以拾取没有参数的对象。

        2
  •  0
  •   TonyP    14 年前

    下面是返回给定例程参数信息的SQL函数

        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