【发布时间】:2009-06-26 18:31:43
【问题描述】:
我想知道是否有一种方法可以通过一些配置 xml 参数将 NULL 或 DBNull.Value 从我的 C# 数据服务发送到存储过程。
在 proc 中,我想稍微从 xml 中提取一些值,但是由于 UI 允许第三种状态,因此从 xml 传入的位值可以为 NULL,在这种情况下,我想忽略任何 SQL该字段的更新。
XElement xml = new XElement("XML");
xml.Add(new XElement("SomeConfigValue", NULL));
似乎当我从 C# 向 xml 中抛出一个 NULL 时,它默认为一个没有值的节点。
<SomeConfigValue />
当我尝试从 xml 中获取值作为 SQL 中的位时,该值被解释为 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
【问题讨论】:
-
不应该有一个关于如何做到这一点的标准吗?
标签: sql xml sql-server-2005 null