SQL語句實現兩個資料庫表直接操作

2022-03-12 19:17:31 字數 4038 閱讀 9630

**:

原表及資料:(原始表有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

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_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

--把本地表匯入遠端表

sql 定時同步兩個資料庫

定時同步伺服器上的資料 例子 測試環境,sql server2000,遠端伺服器名 xz,使用者名為 sa,無密碼,測試資料庫 test 伺服器上的表 查詢分析器連線到伺服器上建立 create table user id int primary key,number varchar 4 name ...

對比兩個資料庫表結構

在專案做好後實施了以後,可能因為需求等原因需要公升級,這時候一般都是在測試系統改好後在更新到正式系統.儲存過程,檢視等可以直接通過全部刪除在建立進行更新,但是表因為正式系統裡已有資料所以無法通過該方式進行更新.只能更改表結構,而這時有可能因為更改的表結構比較多,而出現有的表忘了更新.該程式可以對比兩...

兩個資料庫連線

可以建dblink 然後寫procedure 然後建 scheduler 定期同步或者在表的trigger裡面寫 怎麼寫procedure,建 scheduler 定期同步?還有就是dblink可不可以處理大資料量的資料 百萬條資料 一 db link的連線方式 1 已經配置本地服務 create ...