gpt4 book ai didi

tsql - 在一条 SQL 语句中插入和更新记录?

转载 作者:行者123 更新时间:2023-12-04 23:59:28 25 4
gpt4 key购买 nike

我有一张 BigTable 表和一张 LittleTable 表。我要搬家一份将 BigTable 中的一些记录放入 LittleTable,然后(对于这些记录)将 BigTable.ExportedFlag 设置为 T(表示记录的副本已移至小表)。

有没有办法在一个声明中做到这一点?

我知道我可以进行以下交易:

  • 基于 where 子句
  • 从大表中移动记录
  • 基于相同的 where 子句更新导出到 T 的大表设置。

  • 我还查看了 MERGE statement ,这似乎不太正确,因为我不想更改小表中的值,只需将记录移动到小表。

    我查看了 OUTPUT clause在更新语句之后但找不到有用的示例。我不明白为什么 Pinal Dave 使用 Inserted.ID, Inserted.TEXTVal, Deleted.ID, Deleted.TEXTVal而不是 Updated.TextVal .更新是插入还是删除?

    我找到了这个帖子 TSQL: UPDATE with INSERT INTO SELECT FROM说“AFAIK,你不能用一个 sql 语句更新两个不同的表。”

    是否有一个干净的单一语句来做到这一点?我正在寻找正确的、可维护的 SQL 语句。我是否必须在单个事务中包装两个语句?

    最佳答案

    您可以使用 OUTPUT条款只要LittleTable满足成为 OUTPUT ... INTO 目标的要求

    UPDATE BigTable
    SET ExportedFlag = 'T'
    OUTPUT inserted.Col1, inserted.Col2 INTO LittleTable(Col1,Col2)
    WHERE <some_criteria>

    如果您使用 INSERTED 没有区别或 DELETED .唯一不同的列是您正在更新的列( deleted.ExportedFlag 具有之前的值, inserted.ExportedFlag 将是 T )

    关于tsql - 在一条 SQL 语句中插入和更新记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12407554/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com