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