zoukankan      html  css  js  c++  java
  • [转]mssql链接服务器

    mssql version:sql server 2008
    mysql
    version:mysql-5.1.32

    1,安装MSDASQL
    --安装MSDASQL(64 位 OLEDB Provider for
    ODBC
    (MSDASQL))
    --http://www.microsoft.com/downloads/details.aspx?FamilyID=000364db-5e8b-44a8-b9be-ca44d18b059b&displaylang=zh-cn
    --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
    go
    exec sp_configure
    'Ad Hoc Distributed
    Queries',1
    GO
    RECONFIGURE
    GO

    4,建立MYSQL链接服务器
    --用于从mysql获取数据
    EXEC
    master.dbo.sp_addlinkedserver
    @server = N'MYSQL',
    @srvproduct=N'MySQL',

    @provider=N'MSDASQL',
    @provstr=N'DRIVER={MySQL ODBC 5.1 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'
    go
    exec
    sp_addlinkedsrvlogin  'MSSQL', 'false',null, 'username',
    'password'
    go
    select * 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来交互数据库。。。


    --
  • 相关阅读:
    Django1.11框架开发流程简述
    Python之Django框架执行流程简介
    Python之Django框架笔记
    Redis数据库学习笔记
    python之MiniWeb框架
    python之正则表达式
    python之with语句结合上下文管理器
    Python之闭包and装饰器
    Ajax之调用一言网站API接口
    python之pymysql模块简单应用
  • 原文地址:https://www.cnblogs.com/seerlin/p/2065638.html
Copyright © 2011-2022 走看看