sqlserver與mysql資料同步問題

來源:互聯網
上載者:User

標籤:management   sqlserver   microsoft   控制台   管理工具   

由於簡訊項目的需求,需要將sqlserver當中的表即時同步到mysql當中,於是採用觸發器完成該功能,對insert操作進行監控,當sqlserver進行插入操作時,同時將資料插入到mysql當中。

  1. 安裝sqlserver2008以及mysql。

  2. 建立mysql連結的伺服器。

  3. 在本電腦上安裝mysql驅動。Mysql-connector-odbc-5.1.6-win32.msi.

  4. 安裝完畢後,在電腦控制台-管理工具-odbc資料來源-系統dsn-添加-選擇mysql odbc driver-完成。

  5. 輸入連結參數,點擊測試,儲存,完成。成功之後的:

650) this.width=650;" width="498" height="361" src="http://s3.51cto.com/wyfs02/M01/4C/31/wKioL1Q4lBSCXrByAAHCdtOEAj4794.jpg" style="background:url("/e/u261/lang/zh-cn/images/localimage.png") no-repeat center;border:1px solid #ddd;" alt="spacer.gif" title="a.png" />

  1. 開啟sql server management studio,點擊伺服器對象-連結的伺服器,右鍵點選連結伺服器-建立連結的伺服器-輸入串連伺服器名稱,伺服器類型選擇-其他資料來源,提供者選擇“Microsoft OLE DB Provider for ODBCDrivers”,資料來源就選擇剛才建好的glb。


 650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/4C/2F/wKiom1Q4k92iY2oPAAEbq-SeZEI651.jpg" title="b.png" alt="wKiom1Q4k92iY2oPAAEbq-SeZEI651.jpg" />

  1. 測試語句

Select * from OPENQUERY(MYSQL,”select * from table”)

Insert openquery(MYSQL,”select * from table”)(id,name,password)values(‘8’,’qidanei’,’9’)

  1. 寫觸發器

Create trigger tr_insert_user on [test_trigger].[dbo].[user]

For insert

As

Begin

Insert openquery(MYSQL,”select * from user”)select * frominserted

End

 

執行此觸發器,當對user表進行添加的時候,sqlserver會報錯,說不支援分散式交易,查了很多資料,都說sqlserver不支援此操作,於是換了一種方式,通過建立迴環,在觸發器中調用預存程序來實現。

  1. 建立迴環

 --建立LOOPBACK 伺服器連結

EXEC sp_addlinkedserver@server = N‘loopback‘ , @srvproduct = N‘ ‘ , @provider = N‘SQLNCLI‘, @datasrc = @@SERVERNAME

--設定伺服器連結選項,阻止SQL Server 由於遠程序呼叫而將本地事務提升為分布事務(重點)

EXEC sp_serveroptionloopback, N‘rpc out‘ , ‘TRUE‘

EXEC sp_serveroptionloopback, N‘remote proc transactionpromotion‘ , ‘FALSE‘

  1. 重寫觸發器

    create trigger tr_insert_user on [test_trigger].[dbo].[user]

for insert

as

declare @username nchar(100),@userpwd nchar(100)

select @username=user_name,@userpwd=user_pwd from inserted;

begin

print @username

print @userpwd

exec loopback.test_trigger.dbo.sp_test@username,@userpwd

end

  1. 預存程序

create PROCEDURE sp_test(@user_name nchar(100),@user_pwd nchar(100))

AS

BEGIN

-- SET NOCOUNT ON added to prevent extra result sets from

-- interfering with SELECT statements.

print ‘sp_test:‘ + @user_name

print ‘sp_test:‘ + @user_pwd

SET NOCOUNT ON;

 -- Insert statements for procedure here

Insert openquery(MYSQL, ‘select * from user‘)(user_name,user_pwd)values(@user_name,@user_pwd)

END

 

注意點:sqlserver中預存程序中的輸入參數要指定長度,不然在觸發器中傳入的參數會被截取。

 

 

  

 


sqlserver與mysql資料同步問題

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.