我需要为MS-Access 2000编写SQL查询,以便在存在时更新行,但如果不存在则插入. (我相信这被称为“upsert”)
即
如果行存在…
UPDATE Table1 SET (...) WHERE Column1='SomeValue'
如果它不存在……
INSERT INTO Table1 VALUES (...)
这可以在一个查询中完成吗?
解决方法
我通常首先运行insert语句然后检查是否发生了错误3022,这表明该行已经存在.所以像这样:
On Error Resume Next CurrentDb.Execute "INSERT INTO Table1 (Fields) VALUES (Data)",dbFailOnError If Err.Number = 3022 Then Err.Clear CurrentDb.Execute "UPDATE Table1 SET (Fields = Values) WHERE Column1 = 'SomeValue'",dbFailOnError ElseIf Err.Number <> 0 Then 'Handle the error here Err.Clear End If
EDIT1:我想提一下,我在这里发布的是一个非常常见的解决方案,但你应该知道,计划错误并将它们作为程序正常流程的一部分通常被认为是一个坏主意,特别是如果还有其他方法达到相同的结果.感谢RolandTumble指出这一点.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。