Loading [MathJax]/jax/input/TeX/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如果存在,则更新,否则插入新记录

如果存在,则更新,否则插入新记录
EN

Stack Overflow用户
提问于 2010-06-07 18:53:56
回答 3查看 10.5K关注 0票数 1

我正在向表中插入值

如果该记录已经存在,则替换它,如果该记录不存在,则添加一个新记录。

到目前为止,我有以下代码:

代码语言:javascript
运行
AI代码解释
复制
INSERT INTO table_name
VALUES (value1, value2, value3,...) where pk="some_id";

但是我需要这样的东西

代码语言:javascript
运行
AI代码解释
复制
if not pk="some_id" exists then  INSERT INTO table_name
    VALUES (value1, value2, value3,...) where pk="some_id"; else update table_name where pk="some_id"

为此,正确的SQL语法是什么?

请注意,我使用的是sql access,我猜它可以是vba和sql的组合

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-06-07 19:40:58

首先更新您的导入表和主表之间匹配的行。

代码语言:javascript
运行
AI代码解释
复制
UPDATE table_name AS m
    INNER JOIN tblImport AS i
    ON m.pk = i.pk
SET
    m.field2 = i.field2,
    m.field3 = i.field3,
    m.field4 = i.field4;

然后添加主表中不存在的任何导入记录。

代码语言:javascript
运行
AI代码解释
复制
INSERT INTO table_name (
    pk,
    field2,
    field3,
    field4)
SELECT
    i.pk,
    i.field2,
    i.field3,
    i.field4
FROM
    tblImport AS i
    LEFT JOIN table_name AS m
    ON i.pk = m.pk
WHERE
    (((m.pk) Is Null));
票数 2
EN

Stack Overflow用户

发布于 2010-06-07 19:06:09

使用记录集可以很容易地完成此操作。然后,代码将如下所示(对于ADODB记录集):

代码语言:javascript
运行
AI代码解释
复制
myRecordset.find ....
if myRecordset.EOF then
    myRecordset.addNew
endif
....
myRecordset.fields(...) = ...
....
myRecordset.update
票数 1
EN

Stack Overflow用户

发布于 2010-06-07 19:52:32

我已经在许多不同的论坛上发布了很多很多关于我解决这个问题的方法,但我只想概括一下我使用的方法的基本结构。然而,没有办法一步到位。

  1. 从外部数据源更新现有记录。
  2. 插入尚不存在的记录。

这假设有一个公共主键,该主键可用于将现有表与外部数据源链接起来。

任务#2非常简单,只是一个不存在的记录的外连接。

人们可以对#1使用暴力,为主键以外的每个字段编写一个UPDATE语句,但我认为这是混乱和不必要的。另外,因为我有很多复制的应用程序,所以我不能这样做,因为这会导致错误的冲突(当一个字段被更新为与它开始时相同的值时)。

因此,出于这个目的,我使用DAO并编写了一条动态SQL语句来逐列更新。基本结构是这样的:

代码语言:javascript
运行
AI代码解释
复制
  Dim db As DAO.Database
  Dim rs As DAO.Recordset
  Dim fld As DAO.Field
  Dim strField As String
  Dim strSet As String
  Dim strWhere As String
  Dim strSQL As String

  Set db = CurrentDB
  Set rs = db.OpenRecordset("DestinationTable")
  For Each fld in rs.Fields
    strField = fld.Name
    If strField <> "PKField" Then
       strSet = "DestinationTable." & strField & " = ExternalTable." & strField
       strWhere = "Nz(DestinationTable." & strField & ",'') = Nz(ExternalTable." & strField & ", '')"
       strSQL = "UPDATE DestinationTable "
       strSQL = strSQL & " SET " & strSet
       strSQL = strSQL & " WHERE " & strWhere
       db.Execute strSQL, dbFailOnError
       Debug.Print strField & ": " & db.RecordsAffected
    End If
  Next fld

现在,复杂的部分是处理数字字段、日期字段和字符串字段,因此您必须有一些逻辑来编写WHERE子句,以便根据字段类型使用适当的引号和其他分隔符。我通常不测试字段类型,而是像这样使用CASE SELECT,将字符串字段设为默认字段:

代码语言:javascript
运行
AI代码解释
复制
  Dim strValueIfNull As String
  Select Case strField
    Case "DateField1", "DateField2", "NumericField2", "NumericField2", "NumericField3"
      strValueIfNull = "0"
    Case Else
      strValueIfNull = "''"
      strWhere = "Nz(DestinationTable." & strField & ", '') = Nz(ExternalTable." & strField & ", '')"
  End Select
  strWhere = "Nz(DestinationTable." & strField & ", " & strValueIfNull & ") = Nz(ExternalTable." & strField & ", " & strValueIfNull & ")"

我可能把细节弄错了,但我想你明白我的意思了。

这意味着您将只运行与可更新的字段数量相同的SQL更新,并且您将只更新需要更新的记录。如果还用“最后更新”日期标记记录,那么可以在UPDATE SQL中执行此操作,并且只希望对真正具有不同值的记录执行此操作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2992242

复制
相关文章
经典再读 | NASNet:神经架构搜索网络在图像分类中的表现
【导读】从 AutoML 到 NAS,都是企业和开发者的热门关注技术,以往我们也分享了很多相关内容。而这篇文章将对 Google Brain 发布的 NASNet 进行介绍。NASNet 在 CVPR2018 发表,至今已经有超过400次引用。
AI科技大本营
2019/09/17
1.8K0
经典再读 | NASNet:神经架构搜索网络在图像分类中的表现
WPF 点击按钮时更改按钮样式界面效果的 XAML 实现方法
在 WPF 中按钮 Button 将会吃掉路由事件,此时的 EventTrigger 如果通过 RoutedEvent 是 MouseLeftButtonDown 那么将会拿不到路由事件,也就触发不了,因此样式将不会变更。简单的解决方法就是通过 VisualStateManager 配合 VisualState 来实现
林德熙
2020/08/31
4.3K0
在PowerBI的切片器中搜索
在制作PowerBI报告时,一般来说,我们都会创建一些切片器。为了节省空间,一般情况下尤其是类目比较多的时候,大多采用下拉式的:
陈学谦
2020/06/18
12.4K0
DNN在搜索场景中的应用
DNN在搜索场景中的应用潜力,也许会比你想象的更大。 --《阿里技术》 1.背 景 搜索排序的特征在于大量的使用了LR,GBDT,SVM等模型及其变种。主要在特征工程,建模的场景,目标采样等方面做了很细致的工作。但这些模型的瓶颈也非常的明显,尽管现在PS版本LR可以支持到50亿特征规模,400亿的样本,但这看起来依然是不太够的,现在上亿的item数据,如果直接使用id特征的话,和任意特征进行组合后,都会超出LR模型的极限规模,对于GBDT,SVM等模型的能力则更弱,而我们一直在思考怎么可以突破这种模型的限制
昱良
2018/06/25
3.7K0
在Unity场景中更改天空盒的步骤
一、介绍 目的:在Unity场景中制作一个天空盒。 软件环境:Unity 2017.3.0f3,VS2013。 参考 skybox  二、自制一个天空盒 1,创建一个材质material 2,更改属性
Zoctopus
2018/06/04
8.3K0
图像处理在工程中的应用
传感器 图像处理在工程和科研中都具有广泛的应用,例如:图像处理是机器视觉的基础,能够提高人机交互的效率,扩宽机器人的使用范围;在科研方面,相关学者把图像处理与分子动力学相结合,实现了多晶材料、梯度结构等裂纹扩展路径的预测,具体见深度学习在断裂力学中的应用,以此为契机,偷偷学习一波图像处理相关的技术,近期终于完成了相关程序的调试,还是很不错的,😄~ 程序主要的功能如下:1、通过程序控制摄像头进行手势图像的采集;2、对卷积网络进行训练,得到最优模型参数;3、对采集到的手势进行判断,具体如下图所示: 附:
联远智维
2022/01/20
2.3K0
图像处理在工程中的应用
在Power BI中设置动图按钮的做法
在Power BI中要实现按钮变色效果,可以使用按钮工具。 1. 插入按钮 2. 设置什么状态下显示颜色 可以设置悬停或者按下的动作时显示颜色,可以分别设置3种状态下的颜色 3. 颜色设置 可以直接设置,也可以通过条件及度量值设置 当然除了填充的颜色,还可以设置文本状态 如果觉得有帮助,那麻烦您进行转发,让更多的人能够提高自身的工作效率。
逍遥之
2020/03/24
9.2K0
在Power BI中设置动图按钮的做法
在 Flutter 中创建可拖动的浮动操作按钮[Flutter专题15]
Flutter 允许您使用FloatingActionButton小部件添加浮动操作按钮。但是,它不允许您拖动按钮。如果你想让它可拖动怎么办。本教程有一个示例,说明您需要做什么才能创建浮动操作按钮,只要它位于父小部件内,就可以将其拖动到屏幕周围的任何位置。
徐建国
2021/12/07
5.8K0
在 Flutter 中创建可拖动的浮动操作按钮[Flutter专题15]
利用漏洞更改Google搜索排名
只需12美元注册购买一个域名,我就能在Google搜索结果中实现与亚马逊、沃尔玛等高价值关键词相同的广告排名。按照Google Adwords(谷歌付费广告业务)来看,类似Amazon和Walmart这样的关键词,每次点击需要付费给谷歌的广告竞价是1美元,所以很多大公司每月都需要花费数十万美元来在谷歌搜索排名中打广告,但是,我这种方式可是免费的哦。
FB客服
2018/07/30
1.2K0
利用漏洞更改Google搜索排名
在Solr中搜索人名的小建议
搜索人名是我们在许多应用程序中经常用到的功能。比如对书店来说,按作者名检索的功能就相当重要。虽然很难起一个完美的名字,但是我们可以使用Solr的一些功能,使绝大多数英文名搜索达到绝佳的效果。
让让子Dorothy
2018/05/18
2.7K0
在Pandas中更改列的数据类型【方法总结】
有什么方法可以将列转换为适当的类型?例如,上面的例子,如何将列2和3转为浮点数?有没有办法将数据转换为DataFrame格式时指定类型?或者是创建DataFrame,然后通过某种方法更改每列的类型?理想情况下,希望以动态的方式做到这一点,因为可以有数百个列,明确指定哪些列是哪种类型太麻烦。可以假定每列都包含相同类型的值。
kirin
2021/04/19
20.5K0
在Pandas中更改列的数据类型【方法总结】
审计对存储在MySQL 8.0中的分类数据的更改
使用敏感信息时您需要拥有审计日志。通常,此类数据将包含一个分类级别作为行的一部分,定义如何处理、审计等策略。在之前的博客中,我讨论了如何审计分类数据查询。本篇将介绍如何审计对机密数据所做的数据更改。
MySQLSE
2020/11/25
4.7K0
[MongoDB] 使用PHP在MongoDB中搜索的实现
条件操作符用于比较两个表达式并从mongoDB集合中获取数据。 MongoDB中条件操作符有: (>) 大于 - $gt (<) 小于 - $lt (>=) 大于等于 - $gte (<= ) 小于等于 - $lte MongoDB 使用 $regex 操作符来设置匹配字符串的正则表达式,使用PCRE (Perl Compatible Regular Expression) 作为正则表达式语言。 MongoDB OR 条件语句使用了关键字 $or
唯一Chat
2020/02/25
5.2K0
Android – 在Gradle中更改APK文件名
默认情况下,Android Studio中的Gradle构建命名为.apk文件app-release.apk。对应用程序build.gradle文件进行了一些小的更改,可以将.apk名称更改为<app name>-release-<version>.apk。 需要在app的目录下面修改build.gradle文件。 第一步是将project.archivesBaseName设置为您的应用程序名称。 android { compileSdkVersion 25 buildToolsVersio
code_horse
2018/07/02
2.9K0
问与答119:如何使用文件浏览按钮插入文件路径到单元格中?
Q:如果我想在包含文件路径的单元格右侧添加一个文件浏览按钮,以便直接将所选的文件路径输入到该单元格,而无需手动复制粘贴文件路径,该如何实现?
fanjy
2021/05/07
1.8K0
excel如何合并相同项单元格内容_不能对合并单元格部分更改
工作中可能想要快速的实现将Excel相同项目单元格合并,下面就跟大家简单地介绍一下。
全栈程序员站长
2022/11/17
1.9K0
excel如何合并相同项单元格内容_不能对合并单元格部分更改
【CSS】课程网站头部制作 ④ ( 搜索栏按钮测量 | 搜索栏按钮代码编写 | 代码示例 )
文章目录 一、搜索栏按钮测量 1、按钮测量 2、按钮切图 二、搜索栏按钮代码编写 1、HTML 标签结构 2、CSS 样式 3、展示效果 一、搜索栏按钮测量 ---- 1、按钮测量 右侧的按钮大小 , 50 x 40 像素 ; 按钮颜色值 #00a4ff ; 2、按钮切图 使用 切片工具 , 将 按钮图片 进行选择 , 然后进行切图 ; 选择 " 菜单栏 / 文件 / 导出 / 存储为 Web 所用格式 " , 选择导出的格式 , 以及 切好的图片如下 : 二、搜索栏按钮
韩曙亮
2023/04/03
2.3K0
【CSS】课程网站头部制作 ④ ( 搜索栏按钮测量 | 搜索栏按钮代码编写 | 代码示例 )
点击加载更多

相似问题

NLog不创建日志文件

30

NLog系统日志配置文件

123

未创建Nlog日志文件

36

NLog不会创建日志文件

134

我不希望nlog为每毫升创建日志文件

23
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文