Я хочу создать хранимую процедуру (в 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);
}
Здесь я пытаюсь выполнить следующее: если вызывающая сторона явно указывает значение NULL для параметра, я обновлю запись значением NULL
. Однако если пользователь явно игнорирует передачу параметра, то запрос UPDATE
сохранит значение поля / столбца, которое уже установлено для конкретной записи (т. Е. Запрос НЕ обновит этот конкретный столбец).
Я полагаю, что я мог бы указать значения по умолчанию, которые можно смело предположить, что вызывающая сторона никогда не будет использовать - что-то вроде этого:
@ID int,
@Name nvarchar(50) = 'NameIsUndefined',
@Email nvarchar(80) = 'EmailIsUndefined',
@Phone nvarchar(20) = 'PhoneIsUndefined'
Затем в сохраненном процессе я могу проверить неопределенные значения - если для параметра vars все еще установлены значения NameIsUndefined
, EmailIsUndefined
и / или PhoneIsUndefined
, то я могу смело предположить, что вызывающий не определил явно значения для этих параметров. Это единственный способ достичь моей цели?