如何将 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 语句中列出我的所有列,然后将
【问题讨论】:
【参考方案1】:您可以在 select 语句中简单地操作要更新的列。
INSERT INTO table1_archive
SELECT Col1,Col2...,"" AS <my_column> FROM (
DELETE table
OUTPUT
DELETED.*
WHERE <condition1>
) AS RowsToMove;
【讨论】:
多么好的小偷偷摸摸的解决方案。谢谢。我有这个想法,但由于某种原因它突然出现了:D 是否有任何具体原因我必须在 Select 语句中写“AS您可以在单个语句中执行此操作 - 但它需要您枚举列。
假设您的表有列(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 语句中?