回答

收藏

在MS-access中升级

技术问答 技术问答 114 人阅读 | 0 人回复 | 2023-09-13

我需要为MS-Access 2000编写一个SQL查询,以便在存在行中更新,但在不存在的情况下插入。(我相信这叫 upsert”)
* c( ]' l' w3 gIE& d5 Q( @" K; ?# ^8 x. \
如果行存在…, G& V! l' C: r
UPDATE Table1 SET (...) WHERE Column1='SomeValue'如果不存在…
' h+ Q- u* C5 R! X+ aINSERT INTO Table1 VALUES (...)可以在一个查询中完成吗?
6 Q3 I1 j6 v, r                                                               
5 z* |( U; y. y- P    解决方案:                                                               
0 h+ F; m8 K/ j' R                                                                通常,我通常先运行insert句子,然后检查3022是否有错误,这表明银行已经存在。所以这样:
4 t, \4 H$ K5 z+ E9 D# y1 v# l3 c& {On Error Resume NextCurrentDb.Execute "INSERT INTO Table1 (Fields) VALUES (Data)",dbFailOnErrorIf Err.Number = 3022 Then    Err.Clear            CurrentDb.Execute "UPDATE Table1 SET (Fields = Values) WHERE Column1 = 'SomeValue'",dbFailOnErrorElseIf Err.Number  0 Then    'Handle the error here    Err.ClearEnd IfEdit1:
$ R" J" b, x7 u# m4 P  B8 q9 E& H我想提一下,我在这里发布的内容是一个非常常见的解决方案,但你应该意识到,计划错误并将其用作正常程序的一部分通常被认为是一个坏主意,特别是当有其他方法获得相同的结果时。RolandTumble指出这一点。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则