2009-04-05 2 views

ответ

1

Самое быстрое, если не самое аккуратное, решение, которое приходит на ум, - использовать хранимую процедуру «прокладки» со значениями по умолчанию для дополнительных параметров, которые вызывают внутреннюю хранимую процедуру с этими значениями по умолчанию, так же, как вы используете перегрузку метода для ' необязательные "параметры в C# 3 и ранее.

+0

Да, это то, что я делаю сейчас, но Я пытаюсь избежать нескольких процедур хранения для одной и той же вещи. –

-1

Вы можете передать его в нуль, а затем сделать что-то вроде этого:

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 

Passing оба параметра в нуль будет возвращать все строки от человека.

Передача @fname со значением и @lname null возвращает всех лиц с этим @fname.

Передача @lname со значением и @fname null возвращает всех лиц с этим именем.

Передача обоих значений с ненулевым значением позволит найти всех лиц с указанными именами и именами.

1

Есть ли что-то не так, просто передавая в Nulls значения, которые вы хотите использовать по умолчанию?
Предоставлено, что это может не работать в любой ситуации.
Иногда вам может потребоваться узнать, действительно ли фактическое значение 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; 
} 

Это экономит на том, чтобы написать дополнительные «обертка» sprocs принимать в необязательных параметров со значениями по умолчанию, которые затем называют вашу CLR sproc.

Для использования по умолчанию-Value, когда Null проходить в: UseDefault_pID = 1
Чтобы сохранить фактическое значение при Null передать: UseDefault_pID = 0

+0

Ничего плохого, я думаю. Увидев, что это было 3,5 года назад, я не помню оригинального дела. Я могу только предположить, что это была процедура с несколькими необязательными параметрами, поэтому код проверки по умолчанию может затянуться. –

Смежные вопросы