当前位置: 代码迷 >> Sql Server >> 求一SQL语句,实现两个数据库表直接导数解决思路
  详细解决方案

求一SQL语句,实现两个数据库表直接导数解决思路

热度:330   发布时间:2016-04-27 21:59:49.0
求一SQL语句,实现两个数据库表直接导数
如题~~~~~~

原表及数据:(原始表有N个)

tb1
id aa bb cc dd stime
1 11 22 33 44 2009-5-18
2 55 66 77 88 2009-5-19 

tb2
id ee ff gg hh stime
1 12 23 34 45 2009-5-18
2 56 67 78 89 2009-5-19  


导入表:tb3(想实现以下效果)

id sname svalue stime
1 a01 11 2009-5-18
2 b01 22 2009-5-18
3 c01 33 2009-5-18
4 d01 44 2009-5-18  
5 a01 55 2009-5-19
6 b01 66 2009-5-19
7 c01 77 2009-5-19
8 d01 88 2009-5-19
9 e01 12 2009-5-18
10 f01 23 2009-5-18
11 g01 34 2009-5-18
12 h01 45 2009-5-18
13 e01 56 2009-5-19
14 f01 67 2009-5-19
15 g01 78 2009-5-19
16 h01 89 2009-5-19

想实现把原始表中数据导入tb3表中,其中原始表和导入表不在同一个数据库,表的字段名也不相同,但可以写死,
比如tb1中aa对应的tb3中的就是a01
可以用一个小程序实现,条件就是选择原始表名和时间,点导入就把该表对应时间的数据导入到tb3中
想了半天没想出好的解决方法.
请个位帮帮忙,谁做过类似的例子给解答下.要是能用一个存储过程时间就更好了!
意思表达不清楚的请问~
100分笑纳~~

------解决方案--------------------
SQL code
insert into newdatabase.dbo.newdata(col1,col2,col3)select col1,col2,col3from olddatawhere 条件
------解决方案--------------------
探讨
SQL codeSELECT 'A01',AA,stime FROM DB1.DBO.TB1
UNION ALL
SELECT 'B01',BB,stime FROM DB1.DBO.TB1
UNION ALL
SELECT 'C01',CC,stime FROM DB1.DBO.TB1
UNION ALL
SELECT 'D01',DD,stime FROM DB1.DBO.TB1
UNION ALL
SELECT 'E01',AA,stime FROM DB2.DBO.TB2
UNION ALL
SELECT 'F01',BB,stime FROM DB2.DBO.TB2
UNION ALL
SELECT 'G01',CC,stime FROM DB2.DBO.TB2
UNION ALL
SELECT 'H01',DD,stime FROM DB2.DB…

------解决方案--------------------
要用到行列转换,参照
SQL code
/*问题:如果上述两表互相换一下:即表结构和数据为:姓名 语文 数学 物理张三 74  83  93李四 74  84  94想变成(得到如下结果): 姓名 课程 分数 ---- ---- ----李四 语文 74李四 数学 84李四 物理 94张三 语文 74张三 数学 83张三 物理 93--------------*/create table tb(姓名 varchar(10) , 语文 int , 数学 int , 物理 int)insert into tb values('张三',74,83,93)insert into tb values('李四',74,84,94)go--SQL SERVER 2000 静态SQL。select * from( select 姓名 , 课程 = '语文' , 分数 = 语文 from tb  union all select 姓名 , 课程 = '数学' , 分数 = 数学 from tb union all select 姓名 , 课程 = '物理' , 分数 = 物理 from tb) torder by 姓名 , case 课程 when '语文' then 1 when '数学' then 2 when '物理' then 3 end--SQL SERVER 2000 动态SQL。--调用系统表动态生态。declare @sql varchar(8000)select @sql = isnull(@sql + ' union all ' , '' ) + ' select 姓名 , [课程] = ' + quotename(Name , '''') + ' , [分数] = ' + quotename(Name) + ' from tb'from syscolumns where name! = N'姓名' and ID = object_id('tb') --表名tb,不包含列名为姓名的其它列order by colid ascexec(@sql + ' order by 姓名 ')--SQL SERVER 2005 动态SQL。select 姓名 , 课程 , 分数 from tb unpivot (分数 for 课程 in([语文] , [数学] , [物理])) t--SQL SERVER 2005 动态SQL,同SQL SERVER 2000 动态SQL。
------解决方案--------------------
SQL code
DECLARE @TA TABLE([id] INT, [aa] INT, [bb] INT, [cc] INT, [dd] INT, [stime] DATETIME)INSERT @TA SELECT 1, 11, 22, 33, 44, '2009-5-18' UNION ALL SELECT 2, 55, 66, 77, 88, '2009-5-19'DECLARE @TB TABLE([id] INT, [ee] INT, [ff] INT, [gg] INT, [hh] INT, [stime] DATETIME)INSERT @TB SELECT 1, 12, 23, 34, 45, '2009-5-18' UNION ALL SELECT 2, 56, 67, 78, 89, '2009-5-19'SELECT id=row_number() over (order by px,id,seq),sname,svalue,stime INTO tb3FROM (SELECT px=0,id,seq=1,svalue=aa,sname='a01',stime FROM @TA UNION ALLSELECT px=0,id,seq=2,bb,'b01',stime FROM @TA UNION ALLSELECT px=0,id,seq=3,cc,'c01',stime FROM @TA UNION ALLSELECT px=0,id,seq=4,dd,'d01',stime FROM @TA UNION ALLSELECT px=1,id,seq=1,ee,'e01',stime FROM @TB UNION ALLSELECT px=1,id,seq=2,ff,'f01',stime FROM @TB UNION ALLSELECT px=1,id,seq=3,gg,'g01',stime FROM @TB UNION ALLSELECT px=1,id,seq=4,hh,'h01',stime FROM @TB ) TORDER BY px,id,seqselect * from tb3drop table tb3/*id                   sname svalue      stime-------------------- ----- ----------- -----------------------1                    a01   11          2009-05-18 00:00:00.0002                    b01   22          2009-05-18 00:00:00.0003                    c01   33          2009-05-18 00:00:00.0004                    d01   44          2009-05-18 00:00:00.0005                    a01   55          2009-05-19 00:00:00.0006                    b01   66          2009-05-19 00:00:00.0007                    c01   77          2009-05-19 00:00:00.0008                    d01   88          2009-05-19 00:00:00.0009                    e01   12          2009-05-18 00:00:00.00010                   f01   23          2009-05-18 00:00:00.00011                   g01   34          2009-05-18 00:00:00.00012                   h01   45          2009-05-18 00:00:00.00013                   e01   56          2009-05-19 00:00:00.00014                   f01   67          2009-05-19 00:00:00.00015                   g01   78          2009-05-19 00:00:00.00016                   h01   89          2009-05-19 00:00:00.000*/
  相关解决方案