[sql server] sql server 連結 MySql 實測經過

來源:互聯網
上載者:User
[sql server] sql server 連結 MySql 實測經過以下測試是在 xp sp3系統下,使用 sql server 2005 express 與 MySql 5.0

 

 

--通過odbc建立連結的伺服器

-- 方法1、在系統odbc資料來源中 預先添加一個DSN名為MySQL_TestDB的資料來源
--EXEC sp_addlinkedserver  @server = 'MySQL_TestDB', @srvproduct='MySQL', @provider = 'MSDASQL', @datasrc = 'MySQL_TestDB'
--GO
-- 方法2、不在系統odbc資料來源中資料來源,直接寫在配置參數中
EXEC sp_addlinkedserver  @server = 'MySQL_TestDB', @srvproduct='MySQL', @provider = 'MSDASQL', @provstr = 'Driver={BMF MySQL ODBC Driver};Server=localhost;Database=testdb;User=root;Password=;Option=3;'
GO

EXEC sp_addlinkedsrvlogin  @rmtsrvname='MySQL_TestDB',@useself='false',@locallogin='sa',@rmtuser='root',@rmtpassword=''
--刪除連結的伺服器
exec sp_dropserver 'MySQL_TestDB' , 'droplogins'

--查詢
SELECT * FROM OPENQUERY (MySQL_TestDB ,'select * from tb' )
/*
id          name
----------- --------------------
35586       35586
35587       35587
35588       35588
.....
*/
--插入
insert OPENQUERY (MySQL_TestDB ,'select * from tb' ) select 1,2
--更新
update OPENQUERY (MySQL_TestDB ,'select * from tb' ) set name=3 where id=1
--刪除
delete  FROM OPENQUERY (MySQL_TestDB ,'select * from tb' ) where id=1
delete  FROM OPENQUERY (MySQL_TestDB ,'select * from tb' )

 

 

--觸發器中測試,大家比較關係如何同步

--建立測試環境
IF OBJECT_ID('tb') IS NOT NULL  DROP TABLE tb
GO
CREATE TABLE tb
(
 id int identity,
 code varchar(10),
 name varchar(20),  
    CONSTRAINT PK_TB PRIMARY KEY (id)
)
GO

IF OBJECT_ID('tri_tb') IS NOT NULL  DROP trigger tri_tb
GO
create trigger tri_tb
on tb
for insert , update ,delete
as
begin
 if not exists(select 1 from deleted)
  insert OPENQUERY (MySQL_TestDB ,'select * from tb' ) select id,code from inserted
 else
 if not exists(select 1 from inserted)
  delete t from OPENQUERY (MySQL_TestDB ,'select * from tb' ) t,deleted d where t.id=d.id
 else
 update t
 set name=i.code
 from OPENQUERY (MySQL_TestDB ,'select * from tb' ) t,inserted i, deleted d
 where i.id=d.id and i.id=t.id
end
go
--1 isnert
insert tb select 111,111
--第一次執行報錯
/*
訊息 8501,層級 16,狀態 3,過程 tri_tb,第 8 行
伺服器 'LANDSEA-8CC1455/SQLEXPRESS' 上的 MSDTC 不可用。
*/

--查看了一下系統服務,發現dtc的服務未啟動 (Distributed Transaction Coordinator)
--將其啟動後,再次執行,就沒有問題,可能是我都是本機資料庫,沒有分布式的問題(我沒有太多機器),
--這裡很多人都遇到問題,對於這裡的問題已經有很多人整理的很好了,我們可以參考:

[sql server] SQL Server 分散式資料庫的問題和解決方案1
http://blog.csdn.net/xys_777/archive/2010/07/12/5729339.aspx

[sql server] SQL Server 分散式資料庫的問題和解決方案2
http://blog.csdn.net/xys_777/archive/2010/07/12/5729334.aspx

 

--繼續執行成功,為了顯示了影響的行數,我故意沒有在觸發器中加 set nocount on,
/*
(1 行受影響)

(1 行受影響)
*/

--以下測試均很順利
select * from tb
/*
id          code       name
----------- ---------- --------------------
1           111        111

(1 行受影響)

*/
SELECT * FROM OPENQUERY (MySQL_TestDB ,'select * from tb' )
/*
id          name
----------- --------------------
1           111

(1 行受影響)
*/
insert tb select 222,222 union select 333,333
SELECT * FROM OPENQUERY (MySQL_TestDB ,'select * from tb' )
--順序有些亂
/*
id          name
----------- --------------------
2           222
3           333
1           111

(3 行受影響)
*/
update tb set code = 555
SELECT * FROM OPENQUERY (MySQL_TestDB ,'select * from tb' )
--順序有些亂
/*
id          name
----------- --------------------
2           555
3           555
1           555

(3 行受影響)
*/
delete from tb where id=1
SELECT * FROM OPENQUERY (MySQL_TestDB ,'select * from tb' )
/*
id          name
----------- --------------------
2           555
3           555

(2 行受影響)
*/

 

----〉實際大家可以看出來上述方法,只要連結的伺服器改為其他任何資料庫,皆通用

 

網上類似文章:

http://doc.chinaunix.net/sqlserver/201004/492237.shtml(帶圖推薦)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.