由于某种需求,我需要在存储过程中创建两个临时表,将一些数据处理到其中后,我需要将这两个临时表合并为一个结果集并生成到excel中。因此,当我想要显示最终结果集时,我正在考虑使用UNION。
问题是,第一个临时表(表A)固定为20列,第二个临时表(表B)有50列。我的计划是,在处理表A的数据之前,我希望添加30个可为空的列,并为前20列插入数据,其余的都是NULL
我现在能想到的就是在声明临时表时硬编码一些注定要有空值的列:
Declare @tmpTableA table (
....
ProcessDate datetime,
Mode int,
Col21 varchar(10)
Col22 varchar(10)
....
Col50 varchar(50)
)当我将数据插入到表A中时,必须从Col21开始手动添加null
Insert into(.... Col21, Col22, Col23....)
Values (.... NULL, NULL, NULL....)在完成表A和表B的数据处理之后,我使用UNION合并表A和表B
Select *....Col49,Col50 From Table A
Union
Select *....CompleteDate,ContactPerson From Table B除了将Col21到Col50硬编码到表A之外,有没有什么很好的方法可以实现这一点,比如使用while循环将N列动态添加到表A中?
编辑:根据最新要求,B表不是只有50列,而是100列!我真的需要一种动态循环这些列的方法,而不是硬编码超过80列
发布于 2017-03-31 16:52:18
我想你可以这样做
select * into #tableA from #tableB where 1=2这样,两个表将具有相同的列
发布于 2017-03-31 16:15:53
您不需要向表A中添加列,只需添加30个NULL即可从表A中进行选择。
Select *,NULL,...,NULL,NULL From Table A
Union
Select * From Table B您可以添加别名以使结果更清晰一些
Select *,...,NULL CompleteDate, NULL ContactPerson From Table A
Union
Select * From Table Bhttps://stackoverflow.com/questions/43135506
复制相似问题