我想从一个select语句插入到多个表中。可能吗?如何从一个SELECT语句插入到多个表中
这是我想在这里做的事:
insert into table1 (Name, Address)
insert into table2 (Name, Address)
select Name, Address from MainTable
我想从一个select语句插入到多个表中。可能吗?如何从一个SELECT语句插入到多个表中
这是我想在这里做的事:
insert into table1 (Name, Address)
insert into table2 (Name, Address)
select Name, Address from MainTable
可以使用OUTPUT
条款插入到第二个表。如果你想插入两个以上的表格,你必须使用其他方法。
样本数据
DECLARE @MainTable TABLE (Name nvarchar(50), Address nvarchar(50));
DECLARE @T1 TABLE (Name nvarchar(50), Address nvarchar(50));
DECLARE @T2 TABLE (Name nvarchar(50), Address nvarchar(50));
INSERT INTO @MainTable (Name, Address) VALUES
('Name1', 'Address1'),
('Name2', 'Address2'),
('Name3', 'Address3');
查询
INSERT INTO @T1 (Name, Address)
OUTPUT inserted.Name, inserted.Address INTO @T2 (Name, Address)
SELECT Name, Address
FROM @MainTable
;
结果
SELECT * FROM @T1;
SELECT * FROM @T2;
+-------+----------+
| Name | Address |
+-------+----------+
| Name1 | Address1 |
| Name2 | Address2 |
| Name3 | Address3 |
+-------+----------+
+-------+----------+
| Name | Address |
+-------+----------+
| Name1 | Address1 |
| Name2 | Address2 |
| Name3 | Address3 |
+-------+----------+
执行计划
+1总的来说,我喜欢这个('OUTPUT'条款非常方便),但我仍然很好奇O.P.的实际目标是什么。似乎可能仅仅是不需要运行查询两次,但仍然如此。 –
@srutzky,是的,这将是很好的知道实际问题。在这个简单的例子中,执行计划很简单,甚至没有任何临时表 - 两个INSERT链接在一起。对于复杂的SELECT查询,它可能会有所不同。 –
@VladimirBaranov。 。 。你在技术上是正确的。我只用'OUTPUT'和表变量,所以我忘记它适用于任何表。此外,只能将值插入到第一个表中的第二个表中。 –
这是不可能用一个语句。但是,你为什么要这样做? –
table1上的触发器怎么样?添加到table2插入... – bri
@GordonLinoff,它**是**可能在SQL Server 2008中的单个语句中 - 'OUTPUT'子句可以做到这一点。 (至少对于两个目的地表)。 –