我有一个表和一个存储过程。我必须使用存储过程更新表。目前我正在使用具有四个参数的存储过程,但将来参数列表可能会增长。如何在不知道Ado.Net的参数名称和参数计数的情况下更新表格?
注意:我甚至不知道单个参数名称,但我必须使用存储过程和Ado.net更新该表。
答案 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)