Я хочу создать хранимую процедуру (в SQL Server 2008 R2), которая будет обновлять запись в таблице на основе PK таблицы.
Сохраненная процедура будет иметь, например, четыре параметра :
@ID int,
@Name nvarchar(50),
@Email nvarchar(80),
@Phone nvarchar(20)
Как я могу определить, передает ли вызывающая сторона хранимой процедуры значение NULL для одного (или нескольких) параметров или если вызывающая сторона ничего не передала для одного (или нескольких) параметров?
Пример вызывающего абонента C #:
вызывающий указывает NULL
для @Phone
:
using (SqlCommand cmd = new SqlCommand())
{
cmd.CommandType = System.Data.CommandType.StoredProcedure;
cmd.CommandText = "EditPerson";
cmd.Parameters.AddWithValue("@ID", id);
cmd.Parameters.AddWithValue("@Name", 'Frank');
cmd.Parameters.AddWithValue("@Email", 'frank@frank.com');
cmd.Parameters.AddWithValue("@Phone", DBNull.Value);
DatabaseManager.instance.ExecuteScalarQuery(cmd);
}
вызывающий абонент игнорирует параметр @Phone
:
using (SqlCommand cmd = new SqlCommand())
{
cmd.CommandType = System.Data.CommandType.StoredProcedure;
cmd.CommandText = "EditPerson";
cmd.Parameters.AddWithValue("@ID", id);
cmd.Parameters.AddWithValue("@Name", 'Frank');
cmd.Parameters.AddWithValue("@Email", 'frank@frank.com');
DatabaseManager.instance.ExecuteScalarQuery(cmd);
}
What I'm Попытка выполнить здесь заключается в том, что если вызывающий объект явно указывает значение NULL для параметра, я обновлю запись значением NULL
. Однако, если пользователь явно игнорирует передачу параметра, то запрос UPDATE
сохранит значение поля / столбца, которое уже установлено для конкретной записи (т.е. запрос НЕ будет обновлять этот конкретный столбец).
Я полагаю, что я мог бы указать значения по умолчанию, которые можно с уверенностью предположить, что вызывающий объект никогда не будет использовать - примерно так:
@ID int,
@Name nvarchar(50) = 'NameIsUndefined',
@Email nvarchar(80) = 'EmailIsUndefined',
@Phone nvarchar(20) = 'PhoneIsUndefined'
Затем в сохраненной процедуре я могу проверить неопределенные значения - если переменные параметров по-прежнему установлены значения NameIsUndefined
, EmailIsUndefined
и / или PhoneIsUndefined
, тогда я могу с уверенностью предположить, что вызывающий не определил явно значения для этих параметров. Это единственный способ достичь моей цели?