我想创建一个插入查询,即使我插入空值也会插入到我的表中,但我似乎无法做到这一点。
我的桌子是
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
但我似乎无法使其发挥作用。
答案 0 :(得分:1)
始终在生产查询中命名插入列。当您在命令窗口中查找查询时,跳过字段列表很好,但是如果您的代码没有为列命名,那么如果将列添加到表中它将会中断。
如果您事先知道elem2
和elem4
将始终为空,则只需插入elem1
和elem3
。
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);