我有一个包含6列的表(fldAbsentes2)([fldEmployeeID],[fldAbsentDate],[fldAbsentCode] [fldRuleViolationWarningType] [fldRuleViolationIssueDate] ,[fldLOAEndDate]
当我使用sqlcommand的quallowing querystring时,它不会给我一个错误,但它不会更新表。
multstring = "Update tblAbsences2 " & _
"Set fldEmployeeID = '103', " & _
"fldAbsentDate = '1/2/2013', " & _
"fldAbsentCode = 'X', " & _
"fldRuleViolationWarningType = NULL, " & _
"fldRuleViolationIssueDate = NULL, " & _
"fldLOAEndDate = NULL " & _
"Where (fldEmployeeID ='100') AND " & _
"(fldAbsentDate ='1/2/2013') AND " & _
"(fldAbsentCode ='NA') AND " & _
"(fldRuleViolationWarningType = NULL) AND " & _
"(fldRuleViolationIssueDate = NULL) AND " & _
"(fldLOAEndDate = NULL)"
如果我擦除最后三行(避免其中fldname = NULL)并且它可以工作。问题是用户应该能够更新这些值,如果它们是空的。当我使用sql Server管理工作室时,会发生同样的事情。下面也是关于sql管理VS的代码它只有在我擦除where fldname = NULL时才有效。任何帮助将不胜感激
UPDATE [DBName].[dbo].[tblAbsences2]
SET fldAbsentCode = 'works', fldEmployeeID = '1', fldAbsentDate = '1/2/2013 00:00:00', fldRuleViolationWarningType = NULL, fldRuleViolationIssueDate = NULL,
fldLOAEndDate = NULL
WHERE (fldEmployeeID = '1') AND (fldAbsentDate = '1/2/2013 00:00:00') AND (fldAbsentCode = 'test') AND (fldRuleViolationWarningType = NULL) AND
(fldRuleViolationIssueDate = NULL) AND (fldLOAEndDate = NULL)
答案 0 :(得分:3)
SQL中的NULL比较运算符为IS
而不是=
(类似IS NOT
而不是<>
的不等式。
将您的查询更改为使用WHERE column IS NULL
而不是WHERE column = NULL
。
答案 1 :(得分:2)
@dai关于IS NULL是否正确= NULL。那个shoudl修复了你的第一部分问题。但是,如果没有看到数据,我无法预测它是否会解决所有错误的问题。它也可能是你没有任何记录符合所有这些条件。您可能需要在dev上添加测试记录,以充分测试查询的准确性。
我还想提供一种技术来帮助您理解查询出错的原因,以便您无需借助互联网即可修复它。
UPDATE [DBName].[dbo].[tblAbsences2]
SET fldAbsentCode = 'works'
, fldEmployeeID = '1'
, fldAbsentDate = '1/2/2013 00:00:00'
, fldRuleViolationWarningType = NULL
, fldRuleViolationIssueDate = NULL,
fldLOAEndDate = NULL
--select * from [DBName].[dbo].[tblAbsences2]
WHERE (fldEmployeeID = '1')
AND (fldAbsentDate = '1/2/2013 00:00:00')
AND (fldAbsentCode = 'test')
AND (fldRuleViolationWarningType = NULL)
AND (fldRuleViolationIssueDate = NULL)
AND (fldLOAEndDate = NULL)
您将看到我在更新中嵌入了一个已注释掉的选择。只运行选择部分,您将看到更新会影响的结果。查看记录,看看它们是否有意义。在这种情况下,您可以消除最后3个条件(或其他查询的其他可疑条件),并查看这些字段的值在数据库中的含义。如果它们为null,那么您知道如何检查null是否有问题。如果不是,则可能是数据实际上并未提供具有所有这些条件的任何结果。要检查然后添加一些记录(仅在开发!!中)以添加您要查找的条件,然后运行选择并查看是否得到正确的答案。
这与此问题无关,但在检查查询的准确性时返回正确的结果时,您可能还需要删除联接或暂时将其更改为左联接,以查看导致您的数据发生的情况问题
如果不检查该查询的选择将返回什么,则永远不应创建更新或删除查询。 数据的含义驱动查询语法,如果您不确切知道您正在影响哪些记录,则无法知道您是否正确编写了查询。正如您在本案例中看到的那样,查询运行时,它没有语法错误。它根本没有返回正确的结果。是否通过语法检查并不意味着它应该做它应该做的事情。你需要学会按意义进行查询。