2010-06-01 2 views
0

테이블과 저장 프로 시저가 있습니다. 저장 프로 시저를 사용하여 테이블을 업데이트해야합니다. 현재 4 개의 매개 변수를 사용하는 저장 프로 시저를 사용하고 있지만 향후 매개 변수 목록이 커질 수 있습니다. Ado.Net에서 매개 변수 이름 및 매개 변수 개수를 모른 채 테이블을 업데이트하려면 어떻게해야합니까?매개 변수 이름을 모른 채 저장 프로 시저를 통해 데이터베이스를 업데이트하는 방법은 무엇입니까?

참고 : 단일 매개 변수 이름조차 모르지만 저장 프로 시저 및 Ado.net을 사용하여 해당 테이블을 업데이트해야합니다.

+0

당신의 SP 변경하는 경우, 귀하의 SP를 호출하는 코드에 따라 변경해야합니다

는 예를 들어, 다음 SP를 호출해야합니다. 대부분의 경우 SP를 호출하는 하나의 메소드가 있어야하고 코드의 여러 위치에서 호출 될 수 있지만 그 위치는 걱정할 필요가 없으므로 큰 문제는 아닙니다. 매개 변수 목록과 함께. –

답변

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 

따라서, 당신은 위의 것과 같은 선택적 매개 변수를 추가 할 수 있습니다.

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 [email protected] 
0

당신은 매개 변수의 순서를 알고, 매개 변수 이름의 몰라도 SP를 호출 할 수 있습니다. "EXEC my_sp @a, @b, @c"

using (var connection = new SqlConnection("MyConnectionString") 
using (var command = connection.CreateCommand()) 
{ 
    command.CommandText = String.Format("EXEC my_sp {0}, {1}, {2}", "a", "b", "c"); 
    connection.Open(); 
    command.ExecuteNonQuery(); 
} 
관련 문제