如何将 Update 语句添加到我将要插入到带有 MS SQL 查询的表中的选定行中?

Posted

技术标签:

【中文标题】如何将 Update 语句添加到我将要插入到带有 MS SQL 查询的表中的选定行中?【英文标题】:How do I add Update statement to selected rows I am about to insert into a table with MS SQL query? 【发布时间】:2020-09-10 11:53:06 【问题描述】:

我已经绞尽脑汁一段时间了,但没有任何结果。 老实说,我认为我需要重新审视这个问题。 我编写了一个查询,它从一个表中删除数据并将其放入另一个表中。我无法真正弄清楚的是如何在同一个查询中为我正在移动的那些行更新一列。 以下是查询的外观:

INSERT table1_archive
SELECT * FROM (
    DELETE table
       OUTPUT
            DELETED.*
    WHERE <condition1>
) AS RowsToMove;

我想要的也是添加

UPDATE table1 SET <my_column> = "" WHERE <condition1>

由于删除和更新的条件和表相同,我认为调用两个不同的查询来对完全相同的行执行一些操作是没有意义的。 我想要的是在将行移动到 table1_archive 之前或之后清除 中的数据。

我想我的问题是:如何将此更新语句应用于我将要插入 table1_archive 的选定行?

回答

这个问题变得有点多余,因为不需要 UPDATE 语句来实现我想要的。我可以在 SELECT 语句中列出我的所有列,然后将 替换为 NULL 或 '''。

【问题讨论】:

【参考方案1】:

您可以在 select 语句中简单地操作要更新的列。

 INSERT INTO table1_archive
 SELECT Col1,Col2...,"" AS <my_column> FROM (
 DELETE table
   OUTPUT
        DELETED.*
 WHERE <condition1>
 ) AS RowsToMove;

【讨论】:

多么好的小偷偷摸摸的解决方案。谢谢。我有这个想法,但由于某种原因它突然出现了:D 是否有任何具体原因我必须在 Select 语句中写“AS ”,或者我可以写下我的所有列并替换 为空? @Oskars,很高兴它有帮助:)。 'AS 用于将您的列命名为 。如果你不写它,那么该列将没有任何名称。如果你想更新 NULL 作为该列的值,那么你必须写 NULL AS 更多关于别名的信息在这里link【参考方案2】:

您可以在单个语句中执行此操作 - 但它需要您枚举列。

假设您的表有列(col1, col2, col3, mycol),其中mycol 在复制到存档时应设置为null,您可以这样写:

with del as (
    delete ...
    output deleted.*
    where ...
)
insert into table1_archive (col1, col2, col3, mycol)
select col1, col2, col3, null
from del

【讨论】:

【参考方案3】:

你也可以试试这个解决方案

UPDATE example_table1 table1 , 
  (SELECT 
    my_column1, my_column2 
  FROM example_table2
  WHERE 
      table1.my_column3=<condition1> 
  ) table2
SET
   table1.my_column1 = table2.my_column1,
   table1.my_column2 = table2.my_column2
 where table1.ID = table2.ID

【讨论】:

【参考方案4】:
UPDATE  table1  SET
    table1.my_column1= table2.my_column1
FROM
       example_table1 AS table1
  INNER JOIN example_table2 AS table2
       ON table1.ID = table2.ID
WHERE
       table1.my_column2 = <condition1>

【讨论】:

以上是关于如何将 Update 语句添加到我将要插入到带有 MS SQL 查询的表中的选定行中?的主要内容,如果未能解决你的问题,请参考以下文章

如何将 Oracle SQL IF ELSE 插入到 UPDATE 语句中?

如何在Drupal 7中使用entity_save函数插入数据?

如何在准备好的语句php中的不同行中插入多条记录

如何限制Hybris中的插入?

mysql批量插入数据

iPhone4 Core Data如何插入带有节号的新对象?