如何在SQL查询中向两个临时表插入数据?
如何用单条SQL语句将相同数据插入两个临时表?
你尝试的SELECT * INTO #temp1, #temp2 FROM table语法在大多数SQL方言中都不支持,不过可以根据使用的数据库类型,用以下方式实现单条语句插入:
SQL Server 环境
可以借助OUTPUT子句实现单条语句将数据同时插入两个临时表,不过需要预先创建第二个临时表的结构:
-- 先创建匹配原表结构的两个临时表 SELECT TOP 0 * INTO #temp1 FROM table; SELECT TOP 0 * INTO #temp2 FROM table; -- 单条语句完成双表插入 INSERT INTO #temp1 OUTPUT inserted.* INTO #temp2 SELECT * FROM table;
如果不想提前创建表,也可以先通过SELECT INTO创建第一个临时表,再用一条INSERT语句复制数据到第二个表,虽为两条语句但可一次性执行:
SELECT * INTO #temp1 FROM table; INSERT INTO #temp2 SELECT * FROM #temp1;
MySQL 环境
MySQL支持直接在INSERT语句中指定多个目标表,前提是预先创建好两个临时表的结构:
-- 创建和原表结构一致的临时表 CREATE TEMPORARY TABLE temp1 LIKE table; CREATE TEMPORARY TABLE temp2 LIKE table; -- 单条语句插入数据到两个表 INSERT INTO temp1, temp2 SELECT * FROM table;
注意:MySQL的临时表无需加#前缀,用CREATE TEMPORARY TABLE声明即可。
通用兼容方案
如果需要跨数据库兼容,最稳妥的方式是分两步操作,但可放在同一个执行批处理中,效果等同于单次执行:
-- 第一步:创建并填充第一个临时表 SELECT * INTO #temp1 FROM table; -- 第二步:将第一个表的数据复制到第二个 INSERT INTO #temp2 SELECT * FROM #temp1;
内容的提问来源于stack exchange,提问作者Mehrshad. D
相关产品推荐
相关产品推荐

