零不应保存在表中

时间:2012-01-09 11:35:03

标签: sql sql-server vb6 sql-server-2000

的FlexGrid

在保存flexgrid空单元格值时,它在表

中保存为0

例如

的Flexgrid

ID Value1 Value2

001 1 
002 
....

保存...

查询

With flexgrid

 insert into table1 values (NULLIF('" & .TextMatrix(i, 0) & "', '0'), NULLIF('" & .TextMatrix(i, 1) & "', '0'), NULLIF('" & .TextMatrix(i, 2) & "', '0'))

End with

表1

ID Value1 Value2

001 1 0
002 0 0 

它不应该允许在表中保存'0'值,它应该保存为空列。

预期产出

ID Value1 Value2

001 1 
002   

如何解决问题。

需要帮助

2 个答案:

答案 0 :(得分:3)

假设您的列是int,那么您将发送一个空字符串implicitly converted to zero when stored。所以你的NULLIF需要测试空字符串。在NULLIF处理完毕后发生零。

另外:不要连接字符串以构建SQL语句。参数化以避免SQL注入

答案 1 :(得分:1)

这可能在服务器端更好地处理,例如

CREATE PROCEDURE AddThing
@ID INTEGER, 
@Value1 INTEGER = NULL,
@Value2 INTEGER = NULL
AS
INSERT INTO table1 VALUES (@ID, NULLIF(@Value1, 0), NULLIF(@Value2, 0));

然后使用具有强类型Parameter对象的Command对象

从VB调用proc