2009-04-05 4 views

답변

1

마음에 떠오르는 가장 빠른 방법은 'shim'저장 프로 시저를 사용하는 것입니다. 'shim'저장 프로 시저를 사용하려면이 매개 변수를 사용하여 내부 저장 프로 시저를 호출하는 선택적 매개 변수의 기본값을 ' 선택적 매개 변수는 C# 3 및 이전 버전에서 제공됩니다.

+0

그래, 내가 지금 뭘하는지이지만, 같은 일에 대해 여러 개의 저장 프로 시저를 사용하지 않으려 고합니다. –

-1

당신은 널 (null)로 전달하고이 같은 수행 할 수 있습니다

create proc sp_find_person 
@fname varchar(30) 
@lname varchar(60) 
as 
begin 
select * from person a 
where (a.fname = @fname or @fname is null) 
    and (a.lname = @lname or @lname is null); 
end 
go 

사람에서 모든 행을 반환 널 (null)로 두 매개 변수를 전달합니다.

@fname 값과 @lname null을 전달하면 해당 @fname을 가진 모든 사람이 반환됩니다.

값과 @fname이있는 @lname을 전달하면 해당 @lname을 가진 모든 사람이 반환됩니다.

Null이 아닌 값을 모두 전달하면 지정된 fname 및 lname을 가진 모든 사람을 찾을 수 있습니다.

1

기본값을 사용하려는 값에 대해 Null을 전달하는 데 문제가 있습니까?
이 기능은 모든 상황에서 작동하지 않을 수도 있습니다.
때로는 실제 값이 실제로 Null인지 알고 싶을 수 있으므로 기본값을 사용하지 마십시오.
이 경우 추가로 "Default"매개 변수를 추가해야합니다.

[Microsoft.SqlServer.Server.SqlProcedure] 
public static void MySproc(SqlInt32 pID, SqlBoolean UseDefault_pID) 
{ 
    pID = (UseDefault_pID == SqlBoolean.True && pID == SqlInt32.Null) 
     ? SomeDefaultPIDValue : pID; 
} 

이 다음 CLR의 sproc에 전화를 기본값으로 선택적 매개 변수에 걸릴 "래퍼에게"sprocs가를 추가 작성할 필요에 저장합니다. 널이 전달 될 때

는 기본-값을 사용 : UseDefault_pID = 1
널이 전달 될 때 실제 값을 유지하려면 : UseDefault_pID = 0

+0

나는 틀린 아무것도 생각하지 않는다. 이것이 3.5 년 전이었던 것을 볼 때, 저는 원래의 경우를 기억하지 못합니다. 나는 이것이 몇 가지 선택적 매개 변수를 가진 프로 시저 일 뿐이라는 것을 추측 할 수 있으므로 기본 검사 코드가 길어질 수 있습니다. –

관련 문제