在sqlserver下增加MYSQL的鏈結伺服器

2022-05-18 10:51:38 字數 3214 閱讀 2388

mssql version:sql server 2008

mysql version:mysql-5.1.32

1,安裝msdasql

--安裝msdasql(64 位 oledb provider for odbc (msdasql))

----select the version windowsserver2003.windowsxp-kb948459-v2-x64-enu.exe

2,安裝mysql

odbc --mysql-connector-odbc-5.1.6-winx64.msi

3,外圍應用配置器,註冊網路

exec

sp_configure 'show advanced option',1

reconfigure

goexec sp_configure

'ad hoc distributed queries',1

goreconfigure

go4,建立mysql鏈結伺服器

--用於從mysql獲取資料

exec

master.dbo.sp_addlinkedserver

@server = n'mysql',

@srvproduct=n'mysql',

@provider=n'msdasql', @provstr=n'driver=; server=ip; database=dbname; user=username; password=password; option=3'

select * from openquery(mysql,'select id,name from test.user');

insert into openquery(mysql,'select id,name from test.user where 1=0') values (5,'newuser');

5,建立mssql鏈結伺服器

exec sp_addlinkedserver 

'mssql', '', 'sqloledb', 'tcp:ip\hostname,1433'

goexec

sp_addlinkedsrvlogin  'mssql', 'false',null, 'username', 'password'

goselect * from openquery(mssql,'select id,name from test.dbo.[user]')

go***************===

2、資料庫的訪問以及操作

鏈結資料庫建立後,就可以對鏈結資料庫進行訪問,普通方法有2種:

(1)t-sql方式 select * from [鏈結表名稱].[資料庫名].[架構].[表名]

access一般使用: select * from [鏈結表名稱]...[表名] (資料庫名和架構都沒)

mssql 一般使用: select * from [鏈結表名稱].[資料庫名].[dbo].[表名]

oracle 一般使用: 據說是 select * from [鏈結表名稱]..[oracle使用者名稱].[表名] (我沒試成功過。。)

(2)pl/sql方式 使用openquery互動(雖然不是最好的,但速度比第一種方法至少快一半)

查詢例項:

select * from openquery(連線伺服器名稱,'select * from [表名]')

新增例項:

insert openquery (鏈結服務名稱, 'select 欄位1,欄位2 from 表') values ('值1', '值2');

順便提下:openquery 會返回乙個資料集,換言之上面的語句,必須要等表所有資料都select後才會插入資料,如果資料量大這個過程非常漫長,所以上面的語句需要改進下:

insert openquery (鏈結服務名稱, 'select 欄位1,欄位2 from 表 where 1=2') values ('值1', '值2');

更新例項:

update openquery (鏈結服務名稱, 'select 欄位1,欄位2 from 表 where id=1') set 欄位1= '值1', 欄位2= '值2';

刪除例項:

delete openquery (鏈結服務名稱, 'select 欄位1 from 表 where 欄位1=1');

(以上所有操作例項如果鏈結的伺服器是mssql,則需要在表名前新增資料庫和架構,如:資料庫名.dbo.表名)

另外關於引號的小問題也提下,雖然簡單但有時候也容易忽略,比如:

select * from openquery(連線伺服器名稱,'select * from [表名] where id=1') 這樣沒問題,但如果id是字元那麼應該是

select * from openquery(連線伺服器名稱,'select * from [表名] where id=''值''') 需要在一前一後加2個 ' ,如果中間的語句再複雜些,或者引入函式等,需要拆開寫,那前後就需要加4個' ,反正原則就是引一次加2個',其實也就是轉義。

3、同義詞的的使用(僅sql2005及以上版本支援!)

這個東東很好!很強大!(openquery其實也就是它的簡化版)

建立語句:

create synonym [同義詞名稱] for [鏈結伺服器名稱].[資料庫].[架構].[表名]

go我的個人理解是,首先通過鏈結伺服器建立遠端鏈結,再通過鏈結伺服器建立同義詞到本地資料庫,這樣一來在本地資料庫上就相當於建立了虛擬表(支援4種物件的建立:表、檢視、函式、儲存過程),遠端的表就像在本地一樣,所以同義詞翻譯成鏈結表或者鏈結物件似乎更為恰當。。

這樣一來,操作遠端資料庫就非常方便了,不管是access、sql、還是oracle(估計其他資料庫鏈結過來也是一樣的道理,前提是需要有相應的訪問介面)都可以使用最普通的t-sql語句操作,如:

select * from 同義詞名稱

insert into 同義詞名稱(...) values(...)

delete 同義詞名稱 where...

(當然需要執行增加、刪除、修改等操作,需要你相對應的鏈結伺服器有相應的許可權)

這樣一來前面提到的2種訪問鏈結資料庫的方式通通都可以放棄,不過可惜的是如果是sql2000的話,仍然只能使用openquery來互動資料庫。。。

**:

ubuntu在terminal下安裝mysql

安裝的時候。僅僅須要在terminal 中輸入下面幾條命令 1.sudo apt get install mysql server 2.apt get isntall mysql client 3.sudo apt get install libmysqlclient dev 然後就能夠輸入下面命令...

Flask在windows環境下連線Mysql

今天使用flask的sqlalchemy庫配置連線mysql的時候,遇到了個小問題,就是在所有的包環境都正確且正確編譯的情況下,debug出現訪問失敗,提示異常如下 importerror no module named mysqldb sudo apt get install python mys...

SQL Server 增加 刪除 修改

use test go student表 1 1 新增行 全部列的資訊 insert into student values 9 黎明 1992 06 10 男 1 2 新增行 部分資訊,沒有新增資訊的列顯示null insert into student s sname values 12 趙亮 ...