如何通过存储过程更新数据库而不知道参数名称?

时间:2010-06-01 12:19:54

标签: c# .net ado.net

我有一个表和一个存储过程。我必须使用存储过程更新表。目前我正在使用具有四个参数的存储过程,但将来参数列表可能会增长。如何在不知道Ado.Net的参数名称和参数计数的情况下更新表格?

注意:我甚至不知道单个参数名称,但我必须使用存储过程和Ado.net更新该表。

3 个答案:

答案 0 :(得分:0)

使用存储过程中的可选参数来完成此操作。

这是一个没有参数的

Create Procedure MyProcedure
AS

Update Table Set Column = 0

GO

这是一个带有不可忽视的参数

Create Procedure MyProcedure
    @MyColumnValue INTEGER
AS

Update Table Set Column = @MyColumnValue

GO

这是一个有一个参数不可忽略的参数,一个可以被忽略的参数。如果您没有为@MyColumn2Value发送值,它将使用默认值。

Create Procedure MyProcedure
    @MyColumn1Value INTEGER,
    @MyColumn2Value INTEGER = -3
AS

Update Table 
Set 
    Column1 = @MyColumn1Value
    Column2 = @MyColumn2Value

GO

因此,如果您将来添加到您的程序中,并且您不想破坏现有代码,则可以添加上述选项之类的可选参数。

答案 1 :(得分:0)

这是一个(数据库)函数,它返回给定@RoutineName(存储过程名称)的参数信息表。

Create Function [dbo].[ftRoutineSchema](@RoutineName varchar(200)) returns table as return 
--declare @routineName varchar(100);select @routineName='ftBom4Excel'
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.Parameters  
  Where Specific_name=@ROUTINEnAME

答案 2 :(得分:0)