---安裝安裝mysqlconnector
/*
配置mysqlconnector
ODBC數據管理器->系統DSN->添加->mysql ODBC 5.3 ANSI driver->填入data source name如jt,mysql的ip、用戶名、密碼即可
*/
--新建鏈接服務器
exec
sp_addlinkedserver
@server
=
'MySqll_Aggregation'
,
--ODBC里面data source name
@srvproduct
=
'MySql'
,
--自己隨便
@provider
=
'MSDASQL'
,
--固定這個
@datasrc
=NULL,
@location
=NULL,
@provstr
=
'DRIVER={MySQL ODBC 5.3 ANSI Driver};SERVER=172.17.29.33;DATABASE=bi;UID=zhaowenzhong;PORT=3306;'
,
@catalog
=
NULL

---創建連接mysql數據庫的賬號及密碼
exec
sp_addlinkedsrvlogin
@rmtsrvname
=
'
MySqll_Aggregation
'
,
----
ODBC里面data source name
@useself
=
'false'
,
@rmtuser
=
'zhaowenzhong'
,
---mysql賬號
@rmtpassword
=
'mysqldba@2015'
;
--mysql賬號其密碼
---測試是否可以訪問mysql數據庫中的表
select
*
from
openquery
(
MySqll_Aggregation
,
'SELECT * FROM tb; '
)
-----建立允許遠程訪問連接操作
USE
[master]
GO
EXE C
master
.
dbo
.
sp_serveroption
@server
=
N'MySqll_Aggregation'
,
@optname
=
N'rpc out'
,
@optvalue
=
N'TRUE'
GO
EXEC
master
.
dbo
.
sp_serveroption
@server
=
N'MySqll_Aggregation'
,
@optname
=
N'remote proc transaction promotion'
,
@optvalue
=
N'false'
GO
--建立LOOPBACK 服務器鏈接
EXEC
sp_addlinkedserver
@server
=
N'loopback'
,
@srvproduct
=
N' '
,
@provider
=
N'SQLNCLI'
,
@datasrc
=
@@SERVERNAME
go
--設置服務器鏈接選項,阻止SQL Server 由於遠過程調用而將本地事務提升為分布事務(重點)
USE
[master]
GO
EXEC
master
.
dbo
.
sp_serveroption
@server
=
N'loopback'
,
@optname
=
N'rpc out'
,
@optvalue
=
N'TRUE'
GO
EXEC
master
.
dbo
.
sp_serveroption
@server
=
N'loopback'
,
@optname
=
N'remote proc transaction promotion'
,
@optvalue
=
N'false'
GO
---編寫觸發器和存儲過程
--insert
CREATE
TRIGGER
TR_INSERT_TB
ON
DB_TY2015
.
DBO
.
TB
FOR
INSERT
AS
DECLARE
@ID
INT
,
@QTY
INT
SELECT
@ID
=
ID
,
@QTY
=
QTY
FROM
INSERTED
;
BEGIN
EXEC
loopback
.
db_ty2015
.
dbo
.
sp_insert
@id
,
@qty
;
END
CREATE
PROCEDURE
SP_INSERT
@ID
INT
,
@QTY
INT
AS
BEGIN
SET
NOCOUNT
ON
INSERT
OPENQUERY
(
db_ty2015
,
'select * from tb'
)(
id
,
qty
)
values
(
@id
,
@qty
);
SET
NOCOUNT
OFF
END
---update
CREATE
TRIGGER
T R_UPDATE_TB
ON
DB_TY2015
.
DBO
.
TB
FOR
UPDATE
AS
DECLARE
@ID
INT
,
@QTY
INT
SELECT
@ID
=
ID
,
@QTY
=
QTY
FROM
INSERTED
;
BEGIN
EXEC
loopback
.
db_ty2015
.
dbo
.
sp_update
@id
,
@qty
;
END
CREATE
PROCEDURE
SP_UPDATE
@ID
INT
,
@QTY
INT
AS
BEGIN
SET
NOCOUNT
ON
UPDATE
OPENQUERY
(
db_ty2015
,
'select * from tb'
)
SET
qty
=
@qty
WHERE
id
=
@id
SET
NOCOUNT
OFF
END
--delete
CREATE
TRIGGER
TR_DELETE_TB
ON
DB_TY2015
.
DBO
.
TB
FOR
DELETE
AS
DECLARE
@ID
INT
SELECT
@ID
=
ID
FROM
DELETED
;
BEGIN
EXEC
loopback
.
db_ty2015
.
dbo
.
sp_DELETE
@id
;
END
CREATE
PROCEDURE
SP_DELETE
@ID
INT
AS
BEGIN
SET
NOCOUNT
ON
DELETE
OPENQUERY
(
db_ty2015
,
'select * from tb'
)
WHERE
id
=
@id
SET
NOCOUNT
OFF
END
-------初始化數據
表已存在的情況
insert into
penquery
(
MySqll_Aggregation
,
'select * from bi.tb'
)
select
*
from
[FSLogin]
.
[dbo]
.
[tb]
with
(
nolock
)
---從mysql同步表結構及數據到sqlserver上
select
*
into
[SqlServerDBName]
.
dbo
.
MYTest
from
openquery
(
localmysql
,
'select * from mysqldbname.weibosession'
)