我有两个数据库。一个数据库包含当年数据,另一个数据库则包含上一年数据。
我想将名为tbl_Records
的表中的数据复制到临时表中,该表在数据库和临时表中都可用。我使用了内部联接。
select a.*
into #copy
from #temp t
inner join Records2021..tbl_Records r on t.uniqueno = r.uniqueno
where isdeleted = 0
表tbl_Records
具有大约150列,并且所有列都是必需的。因此优选*
现在我需要包括上一年的数据库Records2020
。我该怎么做?
使用CTE可能会有所帮助。但问题是,我需要指定相同的所有列名,这很乏味。是否有更简单的方法来实现这一点,因为我需要在针对不同表的50-60个不同存储过程中实现这一方法。
我的最终目标只是将两个数据库中的数据合并到一个临时表中。
代码尝试:
If object_id('tempdb..#copy') is not null
begin
drop table #copy
end
If object_id('tempdb..#temp') is not null
begin
drop table #temp
end;
with cte as
(
select a.*
from #temp t
inner join Records2021..tbl_Records r on t.uniqueno = r.uniqueno
where isdeleted = 0
union all
select a.*
from #temp t
inner join Records2020..tbl_Records r on t.uniqueno = r.uniqueno
where isdeleted = 0
)
select a.*
into #copy
from cte /*this does not work as I need to mention all 150 columns here.*/
我也对任何其他选择持开放态度。
DBMS:Microsoft SQL Server
您可以使用UNION ALL
来解决它,但请注意#temp
和tbl_Records
表必须具有相同的结构(列和数据类型(。
SELECT
*
INTO
#copy
FROM (
SELECT *
FROM #temp
UNION ALL
SELECT *
FROM [Records2021]..[tbl_Records]
) AS tbl
WHERE
tbl.isdeleted = 0
如果表结构不同,则对一个表使用SELECT ... INTO
,对第二个表使用所需列调整INSERT INTO
。