Используйте необязательные аргументы в SQLCLR - PullRequest
1 голос
/ 05 апреля 2009

У меня есть хранимая процедура в MSSQL 2005 Server SQLCLR. Можно ли определить необязательный аргумент для него? Если да, то как?

Ответы [ 3 ]

1 голос
/ 10 октября 2012

Что-то не так с передачей пустых значений для значений по умолчанию?
Конечно, это может не сработать в любой ситуации.
Иногда вам может понадобиться узнать, действительно ли фактическое значение равно 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 " wrapper " для получения необязательных параметров со значениями по умолчанию, которые затем вызывают ваш sproc CLR.

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

1 голос
/ 05 апреля 2009

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

0 голосов
/ 05 апреля 2009

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

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

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

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

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

Если передать оба с ненулевым значением, найдутся все люди с указанными fname и lname.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...