如何在插入查询中有条件地插入空值?

时间:2015-06-05 22:30:52

标签: c# sql visual-studio-2010 visual-studio-2012

我想创建一个插入查询,即使我插入空值也会插入到我的表中,但我似乎无法做到这一点。

我的桌子是

elem1 Not null
elem2 Can be null
elem3 Not null
elem4 Can be null

命令:

InsertQuery(elem1, elem2, elem3, elem4);

InsertQuery(elem1, elem3)

是否应该满足我的要求,怎么做?

这样的事情:

insert into table1
values (@value1, @value2, @value3, @value4)
where value2 and value4 IS NULL

但我似乎无法使其发挥作用。

2 个答案:

答案 0 :(得分:1)

始终在生产查询中命名插入列。当您在命令窗口中查找查询时,跳过字段列表很好,但是如果您的代码没有为列命名,那么如果将列添加到表中它将会中断。

如果您事先知道elem2elem4将始终为空,则只需插入elem1elem3

INSERT INTO table1 (elem1, elem3)
VALUES (@value1, @value3)

如果您事先不知道,请插入所有字段:

INSERT INTO table1 (elem1, elem2, elem3, elem4)
VALUES (@value1, @value2, @value3, @value4)

请注意,绑定参数时,可以将变量用于非空值,但对于空值,必须使用DBNull.Value

if (var1 == null) {
  cmd.Parameters.AddWithValue("@value1", DBNull.Value);
} else {
  cmd.Parameters.AddWithValue("@value1", var1);
}
// and likewise for values 2, 3, and 4

您也可以使用单线程执行此操作,但它比上面的if方法更难阅读:

cmd.Parameters.AddWithValue("@value1", ((Object)var1) ?? DBNull.Value);
// and likewise for values 2, 3, and 4

答案 1 :(得分:0)

由于您包含了一个c#标记,我假设您希望代码能够执行此操作。因此,请查看parameterized queries的最佳做法。

查询文本如下:

INSERT INTO table1 VALUES (@Variable1, @variable2, @Variable3, @variable4);