Sql 无法将值NULL插入到列中
我有一些问题。我正在尝试获取一个要更新的表,但是它没有更新,因为其中一个字段包含空值的行 以下是没有错误的原始查询:Sql 无法将值NULL插入到列中,sql,null,sql-update,Sql,Null,Sql Update,我有一些问题。我正在尝试获取一个要更新的表,但是它没有更新,因为其中一个字段包含空值的行 以下是没有错误的原始查询: sql="UPDATE empPac SET quantityLimit = allocation, allocationStart = '"&allocationStart&"', nextUpdate = DATEADD(mm, allocationMonths, "&allocationStart&"), lastUpdate
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&"')"
sql=“UPDATE empPac SET quantityLimit=allocation,allocationStart=”&allocationStart&“,nextUpdate=DATEADD(mm,allocationMonths,&allocationStart&)”,lastUpdate=GETDATE(),QuantityIssuited=0,quantityShipped=0,其中allocationMonths 0和nextUpdate这与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"
sql=“UPDATE empPac SET quantityLimit=allocation,allocationStart=”&allocationStart&“,nextUpdate=DATEADD(mm,allocationMonths,&allocationStart&)”,lastUpdate=GETDATE(),quantityIssued=0,quantityShipped=0,其中allocationMonths 0和(nextUpdate这与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"
sql=“UPDATE empPac SET quantityLimit=allocation,allocationStart=”&allocationStart&“,nextUpdate=DATEADD(mm,allocationMonths,&allocationStart&)”,lastUpdate=GETDATE(),quantityIssued=0,quantityShipped=0,其中allocationMonths 0和(nextUpdate问题不在于列nextUpdate
;根据错误消息,问题在于试图将NULL
分配到列quantityLimit
。查看您的代码,您正在将quantityLimit
设置为等于值allocation
,我假定该值是您的另一列。)数据库-确保列或输入不为null。问题不在于列nextUpdate
;根据错误消息,问题在于试图将null
分配到列quantityLimit
。查看代码,您正在将quantityLimit
设置为等于值分配
,我假定它是数据库中的另一列-确保列或输入不为空。将或nextUpdate为空添加到中,其中子句拓宽了搜索条件,即可以找到更多行
显然,这些附加行中的一行在分配
字段中有一个空值(然后将其分配给数量限制
,根据错误消息,该字段不是空值).将或nextUpdate添加到您的WHERE
子句中会拓宽搜索条件,即可以找到更多行
显然,这些附加行中的一行在分配
字段中有一个空值(然后将其分配给quantityLimit
,根据错误消息,该字段不为空)。如果您试图编辑一个表列以使其不为空,则这只是一个观察值。您可能会得到一个错误消息:
“无法将值null插入列更新失败”
即使您得到了正确的UPDATESQL语句
ALTER TABLE
[dbo].[Table name]
ALTER COLUMN
[Column Name]
NVARCHAR(250) NOT NULL;
解决方案:非常简单
在同一列的空行上插入一些值
现在尝试执行update语句。
希望这能节省一些时间,并能有所帮助
Vinu-Nair如果您试图编辑一个表列使其不为空(以前为空),则这只是一个观察。您可能会得到一个错误,说明:
“无法将值null插入列更新失败”
即使您得到了正确的UPDATESQL语句
ALTER TABLE
[dbo].[Table name]
ALTER COLUMN
[Column Name]
NVARCHAR(250) NOT NULL;
解决方案:非常简单
在同一列的空行上插入一些值
现在尝试执行update语句。
希望这能节省一些时间,并能有所帮助
Vinu Nair你应该真正地参数化你的查询你应该真正地参数化你的查询第一个查询工作正常。问题发生在我添加到WHERE时…请看我的OP中的第一个查询,没有错误…我在OP中发布的第二个查询没有错误。这就是我丢失的原因。第一个查询工作正常。问题是当我添加到WHERE时出现m…请参阅我的OP中的第一个查询,它没有给出错误…但我在OP中发布的第二个查询却出现了错误。这就是我丢失的原因。因此,您的empPac表中没有分配为NULL的行?如果是,则WHERE子句会导致选择分配为NULL的行进行更新。再次,请找出是什么原因re分配列为NULL(通过将更新作为SELECT运行,并添加一些列以帮助标识行)并处理该参数或修复数据。编辑:请参阅我的修复。它不能保证quantityLimit会正确更新,但会阻止错误。因此,您的empPac表中没有分配为空的行?如果是,则where子句会导致选择分配为空的行进行更新。再次,请找出分配为空的行的位置e分配列为NULL(通过将更新作为SELECT运行,并添加一些列以帮助识别行),并处理该参数或修复数据。编辑:请参阅我的修复。这不能保证quantityLimit会正确更新,但会停止错误。太棒了,我添加了“WHERE allocation is NOT NULL”,它现在可以工作了:)谢谢大家,allawesome,我添加了“WHERE allocation NOT NULL”,它现在可以工作了:)谢谢大家