无法将值NULL插入列中

时间:2011-09-19 22:34:50

标签: sql null sql-update

我遇到了一些问题。我试图让表更新,但它没有更新,因为其中一个字段包含具有NULL值的行。

继承原始查询,没有错误:

        sql="UPDATE empPac SET quantityLimit = allocation, allocationStart = '"&allocationStart&"', nextUpdate = DATEADD(mm, allocationMonths, "&allocationStart&"), lastUpdate = GETDATE(), quantityIssued = 0, quantityShipped = 0 WHERE allocationMonths <> 0 AND nextUpdate <= DATEADD(mm, "&checkCondition&", GETDATE()) and empIdent in (select empIdent from employee where custIdent='"&custIdent&"')"

现在,nextUpdate列可能为NULL,因此我尝试使用此查询来适应:

        sql="UPDATE empPac SET quantityLimit = allocation, allocationStart = '"&allocationStart&"', nextUpdate = DATEADD(mm, allocationMonths, "&allocationStart&"), lastUpdate = GETDATE(), quantityIssued = 0, quantityShipped = 0 WHERE allocationMonths <> 0 AND (nextUpdate <= DATEADD(mm, "&checkCondition&", GETDATE()) OR nextUpdate IS NULL) and empIdent in (select empIdent from employee where custIdent='"&custIdent&"')"

您可以看到我在括号中添加了“OR nextUpdate IS NULL”以及nextUpdate的其他条件。

但是,我收到错误“无法将值NULL插入列'quantityLimit',表'myname.dbo.EmpPac';列不允许空值.UPDATE失败。”

这对我没有意义,因为在查看myLittleAdmin时,会向我显示该表列中某些行的NULL值。

4 个答案:

答案 0 :(得分:2)

这与NextUpdate列为NULL无关,这与empPac表中的分配列为NULL有关。处理分配列为NULL(或修复数据),它将正常工作。

编辑:我唯一可以保证的是错误会消失:

sql="UPDATE empPac SET quantityLimit = allocation, allocationStart = '"&allocationStart&"', nextUpdate = DATEADD(mm, allocationMonths, "&allocationStart&"), lastUpdate = GETDATE(), quantityIssued = 0, quantityShipped = 0 WHERE allocationMonths <> 0 AND (nextUpdate <= DATEADD(mm, "&checkCondition&", GETDATE()) OR nextUpdate IS NULL) and empIdent in (select empIdent from employee where custIdent='"&custIdent&"') AND allocation IS NOT NULL"

答案 1 :(得分:2)

问题不在于nextUpdate列;根据错误消息,问题是尝试将NULL分配到列quantityLimit中。查看代码,您将quantityLimit设置为等于值allocation,我认为这是数据库中的另一列 - 确保列或输入不为空。

答案 2 :(得分:1)

在您的OR nextUpdate IS NULL子句中添加WHERE 加宽搜索条件 - 即可以找到更多行。

显然,其中一个附加行在allocation字段中有一个NULL(然后被分配给quantityLimit,根据错误消息,它是非空的。)

答案 3 :(得分:0)

请观察一下,如果您尝试编辑表列以使其不为空(以前为null)。您可能会收到一条错误消息:

  

“无法将null值插入列更新失败”

即使您已安装了正确的更新sql语句

ALTER TABLE
[dbo].[Table name] 
ALTER COLUMN
  [Column Name]
    NVARCHAR(250) NOT NULL;

解决方案:非常简单

  1. 在同一列的空白行上插入一些值
  2. 尝试立即执行更新语句。 希望这可以节省一些时间,并且对您有所帮助。

Vinu Nair