如题~~~~~~原表及数据:(原始表有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分笑纳~~

解决方案 »

  1.   

    如果是2个服务器就用连接服务器,作业存储执行就OK
    如果在一个服务器,直接服务器名.dbo.表明,INSERT就行了
      

  2.   

    一个服务器的话,SLQ如何写呢?麻烦写下例子好么?
    原始表数据库名:olddata
    导入表数据库名:newdata
    谢谢了!
      

  3.   

    SELECT '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.DBO.TB2
      

  4.   


    insert into newdatabase.dbo.newdata(col1,col2,col3)
    select col1,col2,col3
    from olddata
    where 条件
      

  5.   

    --更正,假設 TB1,TB2 在olddata TB3在newdata
    INSERT newdata.DBO.TB3 SELECT * FROM
    (
    SELECT 'A01',AA,stime FROM olddata.DBO.TB1
    UNION ALL
    SELECT 'B01',BB,stime FROM olddata.DBO.TB1
    UNION ALL
    SELECT 'C01',CC,stime FROM olddata.DBO.TB1
    UNION ALL
    SELECT 'D01',DD,stime FROM olddata.DBO.TB1
    UNION ALL
    SELECT 'E01',AA,stime FROM olddata.DBO.TB2
    UNION ALL
    SELECT 'F01',BB,stime FROM olddata.DBO.TB2
    UNION ALL
    SELECT 'G01',CC,stime FROM olddata.DBO.TB2
    UNION ALL
    SELECT 'H01',DD,stime FROM olddata.DBO.TB2
    )T
      

  6.   

    要用到行列转换,参照
    /*
    问题:如果上述两表互相换一下:即表结构和数据为:
    姓名 语文 数学 物理
    张三 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
    ) t
    order 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 asc
    exec(@sql + ' order by 姓名 ')--SQL SERVER 2005 动态SQL。
    select 姓名 , 课程 , 分数 from tb unpivot (分数 for 课程 in([语文] , [数学] , [物理])) t--SQL SERVER 2005 动态SQL,同SQL SERVER 2000 动态SQL。
      

  7.   

    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 tb3
    FROM (
    SELECT px=0,id,seq=1,svalue=aa,sname='a01',stime FROM @TA 
    UNION ALL
    SELECT px=0,id,seq=2,bb,'b01',stime FROM @TA 
    UNION ALL
    SELECT px=0,id,seq=3,cc,'c01',stime FROM @TA 
    UNION ALL
    SELECT px=0,id,seq=4,dd,'d01',stime FROM @TA 
    UNION ALLSELECT px=1,id,seq=1,ee,'e01',stime FROM @TB 
    UNION ALL
    SELECT px=1,id,seq=2,ff,'f01',stime FROM @TB 
    UNION ALL
    SELECT px=1,id,seq=3,gg,'g01',stime FROM @TB 
    UNION ALL
    SELECT px=1,id,seq=4,hh,'h01',stime FROM @TB 
    ) T
    ORDER BY px,id,seqselect * from tb3drop table tb3
    /*
    id                   sname svalue      stime
    -------------------- ----- ----------- -----------------------
    1                    a01   11          2009-05-18 00:00:00.000
    2                    b01   22          2009-05-18 00:00:00.000
    3                    c01   33          2009-05-18 00:00:00.000
    4                    d01   44          2009-05-18 00:00:00.000
    5                    a01   55          2009-05-19 00:00:00.000
    6                    b01   66          2009-05-19 00:00:00.000
    7                    c01   77          2009-05-19 00:00:00.000
    8                    d01   88          2009-05-19 00:00:00.000
    9                    e01   12          2009-05-18 00:00:00.000
    10                   f01   23          2009-05-18 00:00:00.000
    11                   g01   34          2009-05-18 00:00:00.000
    12                   h01   45          2009-05-18 00:00:00.000
    13                   e01   56          2009-05-19 00:00:00.000
    14                   f01   67          2009-05-19 00:00:00.000
    15                   g01   78          2009-05-19 00:00:00.000
    16                   h01   89          2009-05-19 00:00:00.000
    */
      

  8.   

    访问数据:SELECT * FROM 数据库名.架构名.表名
    用几个表查询,拼接成tb3要的数据,插入即可。
      

  9.   


    create table tb1 
    (
    id  int, aa int,  bb int, cc int,  dd int, stime Datetime
    )create table tb2 
    (
    id  int,  ee int, ff int, gg int, hh int, stime Datetime
    )insert into tb1
    select 1,  11,  22,  33,  44 , '2009-5-18 ' union all
    select 2,  55,  66,  77,  88,  '2009-5-19 'insert into tb2
    select 1 , 12,  23 , 34,  45,  '2009-5-18 ' union all
    select 2,  56,  67,  78,  89,  '2009-5-19  'select * from tb1
    select * from tb2create table  modelbaby5
    (
    id int identity(1,1) ,sname varchar(10), svalue varchar(10), stime Datetime
    )
    create proc  tb1_tb1_TO_modelbaby5
    asinsert into  数据库名称.dbo.modelbaby5
    SELECT 'A01',AA,stime FROM DBO.TB1
    UNION ALL
    SELECT 'B01',BB,stime FROM  DBO.TB1
    UNION ALL
    SELECT 'C01',CC,stime FROM  DBO.TB1
    UNION ALL
    SELECT 'D01',DD,stime FROM  DBO.TB1
    UNION ALL
    SELECT 'E01',ee,stime FROM DBO.TB2
    UNION ALL
    SELECT 'F01',ff,stime FROM DBO.TB2
    UNION ALL
    SELECT 'G01',gg,stime FROM DBO.TB2
    UNION ALL
    SELECT 'H01',hh,stime FROM DBO.TB2
    exec tb1_tb1_TO_modelbaby5select *from modelbaby5
      

  10.   

    使用9楼的行变列插入临时表,转换成你想插入的表的格式和需要判断的字段,然后select这个转换后的临时表
    加上你的条件就行了,INSERT就OK了
      

  11.   

    请问如果是不同服务器怎么那条INSERT呢?
    比如 tb1\tb2 在192.168.1.1服务器上的BASE1数据库中
    tb3在192.168.1.2服务器上的BASE2数据库中
      

  12.   


    /*不同服务器数据库之间的数据操作*/--创建链接服务器 
    exec sp_addlinkedserver   'ITSV ', ' ', 'SQLOLEDB ', '远程服务器名或ip地址 ' 
    exec sp_addlinkedsrvlogin  'ITSV ', 'false ',null, '用户名 ', '密码 ' --查询示例 
    select * from ITSV.数据库名.dbo.表名 --导入示例 
    select * into 表 from ITSV.数据库名.dbo.表名 --以后不再使用时删除链接服务器 
    exec sp_dropserver  'ITSV ', 'droplogins ' --连接远程/局域网数据(openrowset/openquery/opendatasource) 
    --1、openrowset --查询示例 
    select * from openrowset( 'SQLOLEDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名) --生成本地表 
    select * into 表 from openrowset( 'SQLOLEDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名) --把本地表导入远程表 
    insert openrowset( 'SQLOLEDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名) 
    select *from 本地表 --更新本地表 
    update b 
    set b.列A=a.列A 
     from openrowset( 'SQLOLEDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名)as a inner join 本地表 b 
    on a.column1=b.column1 --openquery用法需要创建一个连接 --首先创建一个连接创建链接服务器 
    exec sp_addlinkedserver   'ITSV ', ' ', 'SQLOLEDB ', '远程服务器名或ip地址 ' 
    --查询 
    select * 
    FROM openquery(ITSV,  'SELECT *  FROM 数据库.dbo.表名 ') 
    --把本地表导入远程表 
    insert openquery(ITSV,  'SELECT *  FROM 数据库.dbo.表名 ') 
    select * from 本地表 
    --更新本地表 
    update b 
    set b.列B=a.列B 
    FROM openquery(ITSV,  'SELECT * FROM 数据库.dbo.表名 ') as a  
    inner join 本地表 b on a.列A=b.列A --3、opendatasource/openrowset 
    SELECT   * 
    FROM   opendatasource( 'SQLOLEDB ',  'Data Source=ip/ServerName;User ID=登陆名;Password=密码 ' ).test.dbo.roy_ta 
    --把本地表导入远程表 
      

  13.   

    insert into  dbo.TB3 SELECT 'A01',AA,stime FROM DBO.TB1 (这个是同服务器可以)
    请问如果是不同服务器怎么那怎么写这条? 
    比如 tb1\tb2 在192.168.1.1服务器上的BASE1数据库中 
    tb3在192.168.1.2服务器上的BASE2数据库中在SQL语句中如何实现呢?
    在线等!!!!!!!!!
      

  14.   

    exec sp_addlinkedserver   's1', ' ', 'SQLOLEDB ', '192.168.0.1' 
    exec sp_addlinkedsrvlogin  's1', 'false ',null, 'sa', '123456' select * from s1.BASE1.dbo.tb1exec sp_dropserver  's1', 'droplogins '
      

  15.   

    SQLSERVER 2000:INSERT INTO dbo.TB3 SELECT 'A01',AA,stime FROM OPENDATASOURCE('SQLOLEDB','Data Source=\\192.168.1.1;User ID=sa;Password=sa).[LOCAL].dbo.[TB1]好久没用了,你先试试
      

  16.   

    在192.168.1.1服务器底下的  安全性--》链接服务器--》新建链接服务器--》输入链接服务器名称(另一个服务器的IP:192.168.1.2)
    如果都是SQL,服务器类型就选择SQL server,再到安全性选项卡,选择最后一项 
    用此安全上下文进行输入另一个服务器的用户密码,确定就行了
    再192.168.1.1下就可以使用这个语句了
    insert into [192.168.1.2].databasename.dbo.tb3(col1,col2,clo3)
    SELECT 'A01',AA,stime 
    FROM DBO.TB1
    ..
    ..
    ..
      

  17.   

    LZ的意思是跨库操作数据表吧1. 先连接到tb1,tb2的数据库use tb1数据库名
    go2. 再执行下面的脚本, 意思是从当前tb1数据库中根据条件取数据, 再插入到目标数据库中
    日期条件LZ自行修改哟declare @dtQty smalldatetime
    set @dtQty = '2009-05-18'insert into tb3数据库名.dbo.tb3
    select 'A01', AA, stime from tb1 where stime = @dtQty
    union all
    select 'B01', BB, stime from tb1 where stime = @dtQty
    union all
    select 'C01', CC, stime from tb1 where stime = @dtQty
    union all
    select 'D01', DD, stime from tb1 where stime = @dtQty
    union all
    select 'E01', ee, stime from tb2 where stime = @dtQty
    union all
    select 'F01', ff, stime from tb2 where stime = @dtQty
    union all
    select 'G01', gg, stime from tb2 where stime = @dtQty
    union all
    select 'H01', hh, stime from tb2 where stime = @dtQty
      

  18.   

    declare @source table
    (
    RowID int identity(1,1),
    aa int,
    bb int,
    cc int,
    dd int,
    stime date
    )declare @result table
    (
      id int identity(1,1),
      sname varchar(10),
      svalue int,
      stime date
    )insert into @source(aa,bb,cc,dd,stime)
    values(11,22,33,44,'2009-5-18'),
    (55,66,77,88,'2009-5-19')insert into @result(sname,svalue,stime)
    select test,svalues,stime
    from @source unpivot (svalues for test in (aa,bb,cc,dd)) unpot
    select * from @result
      

  19.   

    use Chapter15
    go
    create table tb1
    (
    id int identity(1,1) primary key,aa varchar(20),bb varchar(20),cc varchar(20),dd varchar(20),stime varchar(20)
    )
    go
    create table tb2
    (
    id int identity(1,1) primary key,ee varchar(20),ff varchar(20),gg varchar(20),hh varchar(20),stime varchar(20)
    )
    goinsert into tb1 values(  '11',  '22',  '33',  '44', '2009-5-18')
    insert into tb1 values('55',  '66',  '77',  '88',  '2009-5-19')
    insert into tb2 values('12',  '23',  '34',  '45',  '2009-5-18')
    insert into tb2 values('56',  '67',  '78',  '89',  '2009-5-19')use NewsTable
    go
    create table tb3
    (
    id int identity(1,1) primary key,sname varchar(20),svalue varchar(20),stime varchar(20)
    )     
    goinsert into NewsTable.dbo.tb3 select stuff(sname,2,1,'01') as sname,value as svalue,stime from (select id,aa,bb,cc,dd,stime from tb1) a
    unpivot (value for sname in (aa,bb,cc,dd)) as unainsert into NewsTable.dbo.tb3 select stuff(sname,2,1,'01') as sname,value as svalue,stime from (select id,ee,ff,gg,hh,stime from tb2) b
    unpivot (value for sname in (ee,ff,gg,hh)) as unbselect * from NewsTable.dbo.tb3同一服务器不同数据库
      

  20.   

    这么复杂 好难啊!! 我正在学asp.net  哎!! 数据库  咋这么 麻烦呢!!
      

  21.   

    ----create tbl1
    create table #tb1 (id int,aa int,bb int,cc int,dd int,stime datetime)
    insert into #tb1 values(1,  11,  22,  33,  44,  '2009-5-18')
    insert into #tb1 values(2,  55,  66,  77,  88,  '2009-5-19')--create tbl2
    create table #tb2 (id int,ee int,ff int,gg int,hh int,stime datetime)
    insert into #tb2 values(1,  12,  23,  34,  45,  '2009-5-18')
    insert into #tb2 values(2,  56,  67,  78,  89,  '2009-5-19')--create tbl3
    create table #tb3 (id int identity(1,1),sname varchar(10),svalue int ,stime datetime)
    --insert into tb3
    insert into #tb3(sname,svalue,stime)
    select sname, svalue, stime
    from
    (select aa as a01,bb as b01,cc as c01,dd as d01,stime
    from #tb1 )t
    unpivot
    (svalue for sname in (a01,b01,c01,d01) ) as unpvt
    union all
    select sname, svalue, stime
    from
    (select ee as e01,ff as f01,gg as g01,hh as h01,stime
    from #tb2 )t
    unpivot
    (svalue for sname in (e01,f01,g01,h01) ) as unpvt--check result
    select * from #tb3