我遇到了一些问题。我试图让表更新,但它没有更新,因为其中一个字段包含具有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值。
答案 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;
解决方案:非常简单
Vinu Nair