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

时间:2011-10-30 15:05:30

标签: sql-server tsql dynamic temp-tables

我对目前的情况有疑问,我搜索了网上的任何解决方案,但我仍然无法得到它。

这里的问题是:

我有一堆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语句,我执行的结果来自database2或3或者可能是4,5等等。我将转到我的database1进行永久存储。告诉我们的更多总结方式,我只想制作另一个从不同数据源获取的数据副本并存储到我的本地数据库中以进行进一步处理。

我的主要问题是我的负责人(或经理)告诉我在执行永久物之前将所有执行结果扔到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)
)

问题:无论如何使用动态列创建它?更详细的询问方式,无论如何都要通过select插入到#Temp表而没有列的前缀?因为我不可能为每个执行的SQL创建一堆临时表。

谢谢

PS 1:我是SQL Server的新手,请不要犹豫,说出我的错误或错误。我们都从错误中吸取教训。

PS 2:对不起我的英语水平很差,我尽力更清楚地详细说明。

问候:

LiangCk

1 个答案:

答案 0 :(得分:5)

你说你想要像

这样的东西


INSERT INTO #Table3(coloum1,coloum2,coloum3,coloum4)
Select coloum1,coloum2,coloum3,coloum4
FROM Database3.Table3
WHERE --Some Condition


无需先创建具有固定列的临时表。

这样可行:



Select coloum1,coloum2,coloum3,coloum4
INTO #Table3
FROM Database3.Table3
WHERE --Some Condition


您不必先创建临时表或指定列,只需选择临时表,它就会动态创建。

听起来你想要做更多的事情......我无法弄清楚那是什么,但听起来好像可能会将各种表中的所有数据都选择到一个临时表中(我不是我知道你为什么要这样做)...如果是这种情况,那么UNIONUNION ALL应该有效。您仍然可以将它们与动态创建的临时表一起使用。



Select coloum1,coloum2,coloum3,coloum4
INTO #Table3
FROM Database3.Table3
WHERE --Some Condition

UNION

Select column1, column2, column3, null
FROM Database1.Table1
WHERE --Some condition


上面的null只是为了给第二个选择与第一个相同的列数(我使用了你的帖子中的两个选项);这是UNION的要求。