Мне интересно, есть ли способ отправить NULL или DBNull.Value из моей службы данных C # в хранимый процесс через какой-то параметр xml конфигурации.
В процедуре я хочу извлечь некоторые значения из xml как бит, но поскольку пользовательский интерфейс допускает третье состояние, значение бита, поступающее из xml, может быть NULL, и в этом случае я хочу игнорировать любой SQL обновления для этого поля.
XElement xml = new XElement("XML");
xml.Add(new XElement("SomeConfigValue", NULL));
Кажется, что когда я выбрасываю NULL в xml из C #, по умолчанию это узел без значения.
<SomeConfigValue />
Когда я пытаюсь получить значение из XML как бит в SQL, значение интерпретируется как 0.
select isnull(@Configuration.value('/Configuration[1]/SomeConfigValue [1]', 'bit'), NULL)
Все хорошо. Это имеет смысл. Мне просто любопытно, если кто-нибудь может предложить идеи, из которых я могу заставить это работать так, как мне бы хотелось. Возможно, я не могу полагаться на битовый тип SQL, но в настоящее время я рефакторинг для строгой типизации.
Я бы хотел иметь возможность получить значение NULL, если значение не 1 или 0.
set @SomeConfigValue = isnull(@Configuration.value('/Configuration[1]/SomeConfigValue [1]', 'bit'), NULL)
Цель состоит в том, чтобы игнорировать обновление этого значения, если оно равно NULL или не равно 1 или 0 в этом конкретном случае типа битов SQL.
update MyTable
set ConfigValue =
case
when @SomeConfigValue IS NULL then T.SomeConfigValue
else @SomeConfigValue
end from SomeTable T