SQL Server:使用动态列创建临时表

5

我在当前的情况下遇到了困难,我在网上搜寻各种解决方案,但仍然无法解决问题。

以下是我的问题:

我有一堆需要使用游标在存储过程中执行的SQL语句,每个语句都会从不同的数据库和表中进行选择并插入。

例如:

INSERT INTO Database1.Table1(column1, column2, column3)
   SELECT column1,column2, column3
   FROM Database2.Table2
   WHERE --Some Condition

也许另一个执行的SQL语句是这样的

INSERT INTO Database1.Table3(column1, column2, column3, column4)
   SELECT column1, column2, column3, column4
   FROM Database3.Table3
   WHERE --Some Condition

好的,基本上我的流程是这样的:

Execute Sql to insert into temp Tables --> Insert into a permanent Table from Temp Tables

从上面两个 SQL 语句中,我从数据库2、3或4,5等执行结果,将会进入我的数据库1进行永久存储。换句话说,我只是想复制不同源数据库获取的数据,并将其存储到本地数据库以进行进一步处理。 我的主要问题是,我的负责人(或经理)告诉我在执行到永久存储之前,需要将所有执行结果扔进一个 TEMP 表或 #Table 中。 类似于这样:
INSERT INTO #Table3(column1, column2, column3, column4)
   SELECT column1, column2, column3, column4
   FROM Database3.Table3
   WHERE --Some Condition

我进行了关于#Temp表的一些研究,发现大部分都是通过创建带有'FIX'列的表来实现的,例如:

CREATE TABLE #Table
(
    column1 VARCHAR(10),
    column2 VARCHAR(10),
    column3 VARCHAR(10)
)

问题:有没有办法使用动态列创建它?更详细的询问方式是,有没有办法在不为每个执行的SQL创建一堆临时表的情况下,将其插入到#Temp表中而不加前缀的列?
谢谢
附注1:我对SQL Server非常新手,请不要犹豫地指出我的错误或错误。我们都从错误中学习。
附注2:对于我的英语水平很差,我尽力说明得更清楚。
问候:
LiangCk

2
你可以使用SELECT coloum1,coloum2,coloum3,coloum4 INTO #Table3 FROM Database3.Table3根据SELECT的结果创建一个基于表格。那是你的意思吗? - Martin Smith
不,这不是必要的,因为它可能涉及到几百个 SQL,每个 SQL 可能都有不同的列。如果我按照你所做的那样去做,那就意味着我要创建几百个临时表? - Worgon
我不确定你想要实现什么;据我所知,你有几个具有不同列的表,并且你需要将这些数据插入到一个临时表中。你不能只是备份和还原整个数据库到一个临时数据库中吗?否则,你将需要管理一堆不同的临时表。 - Stuart Ainsworth
@StuartAinsworth 我认为你的第一句话“你有几个具有不同列的表,需要将这些数据插入到一个临时表中”是我想要的。在你的最后一句话中,这是否意味着管理一堆不同的临时表是唯一的方法? - Worgon
1个回答

5
您想要像这样的内容:


INSERT INTO #Table3(coloum1,coloum2,coloum3,coloum4)
Select coloum1,coloum2,coloum3,coloum4
FROM Database3.Table3
WHERE --某个条件


而不必事先创建固定列的临时表。

您可以这样做:



Select coloum1,coloum2,coloum3,coloum4
INTO #Table3
FROM Database3.Table3
WHERE --某个条件


您不需要事先创建临时表或指定列,只需选择插入到临时表中,它将在运行时创建。

听起来您想做更多的事情……我无法确定具体是什么,但听起来好像是从各个表中选择所有数据到单个临时表中(我不知道为什么您要这样做)。如果是这种情况,则可以使用 UNIONUNION ALL。您仍然可以将其与动态创建的临时表一起使用。



Select coloum1,coloum2,coloum3,coloum4
INTO #Table3
FROM Database3.Table3
WHERE --某个条件
UNION
Select column1, column2, column3, null FROM Database1.Table1 WHERE --某个条件

上面的 null 只是为了使第二个查询与第一个查询具有相同数量的列(我使用的是您帖子中的两个查询);这是 UNION 的要求。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接