zoukankan      html  css  js  c++  java
  • SQL语句实现两个数据库表直接操作

    转自:http://blog.163.com/haitaosong_accp/blog/static/5523025920094222105655/

    原表及数据:(原始表有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中

    案例一:

    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 tb2

    create table  modelbaby5

    (

    id int identity(1,1) ,sname varchar(10), svalue varchar(10), stime Datetime

    )

    create proc  tb1_tb1_TO_modelbaby5

    as

    insert 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_modelbaby5

    select *from modelbaby5

     

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

    /*不同服务器数据库之间的数据操作*/

    --创建链接服务器

    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

    --把本地表导入远程表

  • 相关阅读:
    tomcat日志切割脚本
    开源项目推荐:GSL科学计算函数库(GNU Scientific Library),实现VS2019源码编译
    MCUXpresso环境开发(本文争取做到您能够快速简易应用入门,知道大体流程,复杂功能和窗口设置一律不管)
    Arduino uno r3 使用 ESP8266 UARTWiFi 透传模块
    ESP8266引脚的说明
    windows10安装Trading View出错解决办法
    windows or linux 64位安装talib包
    python中list数组指定类型
    面试官问我JVM调优,我忍不住了!
    稳了!我准备了1个晚上的CMS垃圾收集器
  • 原文地址:https://www.cnblogs.com/wangpei/p/1653395.html
Copyright © 2011-2022 走看看