如何将更新语句添加到要通过MS SQL查询插入表中的选定行?

问题描述

我已经抽空了一段时间,没有任何结果。 老实说,我认为我需要对此查询重新审视。 我编写了一个查询,该查询一个表中删除数据并将其放入另一个表中。我不能真正弄清楚的是,如何在同一查询中为我要移动的那些行更新一列。 这是查询的样子:

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或'''。

解决方法

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

假设您的表具有列(col1,col2,col3,mycol),其中mycol在复制到归档文件时应设置为null,则应这样写:

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

您只需在select语句中操作要更新的列即可。

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