有没有办法可以通过XML向SQL存储过程发送NULL值?

时间:2009-06-26 18:31:43

标签: sql xml sql-server-2005 null

我想知道是否有办法可以通过一些配置xml参数从我的C#数据服务向存储过程发送NULL或DBNull.Value。

在proc中,我想从xml中提取一些值,但由于UI允许第三种状态,从xml进来的位值可以为NULL,在这种情况下我想忽略任何SQL该字段的更新。

        XElement xml = new XElement("XML");
        xml.Add(new XElement("SomeConfigValue", NULL));

当我从C#向xml中抛出NULL时,它默认为没有值的节点。

<SomeConfigValue />

当我尝试从SQL中抓取xml中的值时,该值被解释为0.

select isnull(@Configuration.value('/Configuration[1]/SomeConfigValue [1]', 'bit'), NULL)

这一切都很好,很好。这说得通。我只是好奇是否有人可以提出想法,我可以按照我希望的方式使用它。也许我不能依赖SQL位类型,但我目前正在重新分解为强类型。

如果输入的值不是1或0,我希望能够获取NULL。

set @SomeConfigValue = isnull(@Configuration.value('/Configuration[1]/SomeConfigValue [1]', 'bit'), NULL)

目标是忽略更新该值,如果它为NULL,或者在此特定SQL位类型的情况下不是1或0。

        update MyTable
    set ConfigValue = 
            case 
       when @SomeConfigValue IS NULL then T.SomeConfigValue
       else @SomeConfigValue 
    end from SomeTable T

2 个答案:

答案 0 :(得分:1)

这是标准xml序列化使用的方法 - IsNullable。 XElement没有类似的属性,但您可以自己添加属性“xsi:nil”,并在存储过程中对其进行测试。

答案 1 :(得分:1)