Есть ли способ, которым я могу отправить значение NULL в хранимый процесс SQL через XML? - PullRequest
2 голосов
/ 26 июня 2009

Мне интересно, есть ли способ отправить 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

Ответы [ 2 ]

1 голос
/ 27 июня 2009

Возможно, вы захотите проверить

http://blogs.msdn.com/denisruc/archive/2006/11/30/xsi-nil-magic-part-1-2.aspx

и

http://blogs.msdn.com/denisruc/archive/2006/12/04/xsi-nil-magic-part-2-2.aspx

которые говорят о магии xsi: nil в SQL Server 2005

1 голос
/ 26 июня 2009

Здесь методика, используемая при стандартной сериализации xml - IsNullable . XElement не имеет подобного свойства, но вы можете добавить атрибут "xsi: nil" самостоятельно и проверить его в сохраненном процессе.

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