我想在本地数据库中建立一个存储过程,能连接到服务器上的数据库,并能实现增删改查功能,请高手赐教,在线等 谢谢

解决方案 »

  1.   

    --访问不同电脑上的数据库(远程只要联好网就一样) --如果经常访问或数据量大,建议用链接服务器 --创建链接服务器 
    exec   sp_addlinkedserver     'srv_lnk ', ' ', 'SQLOLEDB ', '远程服务器名或ip地址 ' 
    exec   sp_addlinkedsrvlogin   'srv_lnk ', 'false ',null, '用户名 ', '密码 ' 
    go --查询示例 
    select   *   from   srv_lnk.数据库名.dbo.表名 --导入示例 
    select   *   into   表   from   srv_lnk.数据库名.dbo.表名 go 
    --处理完成后删除链接服务器 
    exec   sp_dropserver   'srv_lnk ', 'droplogins ' 
      

  2.   

    /*
    环境 :本地(xp+sql2005):
    select @@versionicrosoft SQL Server 2005 - 9.00.1399.06 (Intel X86) 
    Oct 14 2005 00:33:37 
    Copyright (c) 1988-2005 Microsoft Corporation
    Developer Edition on Windows NT 5.1 (Build 2600: Service Pack 3)
        
    data服务器(win2000+sql2000):
    select @@versionMicrosoft SQL Server  2000 - 8.00.2039 (Intel X86) 
    May  3 2005 23:18:38 
    Copyright (c) 1988-2003 Microsoft Corporation
    Enterprise Edition on Windows NT 5.0 (Build 2195: Service Pack 4)*/
    -- 1 创建链接服务器 
    exec sp_addlinkedserver 'data', '', 'SQLOLEDB','192.168.102.208' 
    exec sp_addlinkedsrvlogin 'data','false ',null, 'sa', 'sa' 
    go
    -- 2 创建测试过程
    if object_id('p_test') is not null drop proc p_test
    go
    create proc p_test @sql varchar(8000)
    as
    begin
    exec(@sql)
    end
    -- 3 测试
    declare @sql varchar(8000)
    set @sql ='
    delete from data.master.dbo.tb
    insert data.master.dbo.tb (item) values(''AAAAAAAAAA'')
    select * from data.master.dbo.tb'
    exec p_test @sql/*(1 行受影响)(1 行受影响)
    Item                                                                                                 FDate                   Type                                                                                                 quantity    unit
    ---------------------------------------------------------------------------------------------------- ----------------------- ---------------------------------------------------------------------------------------------------- ----------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    AAAAAAAAAA                                                                                           NULL                    NULL                                                                                                 NULL        NULL(1 行受影响)*/-- 4 删除链接
    exec sp_dropserver  'data ', 'droplogins' 
      

  3.   

    除了建立远程之外,还可以这样读取远程数据
    select * 
    from opendatasource('sqloledb','data source=192.168.1.xxx; user id=sa;password=11111').数据库名.dbo.表名
      

  4.   


    --查询示例 
    select   *   from   srv_lnk.数据库名.dbo.表
    用这种方法查询时提示SQL SERVER 被拒或无法访问呢? 
      

  5.   

    参考:SQL不同服务器数据库之间的数据操作整理(完整版)http://blog.csdn.net/htl258/archive/2010/06/26/5695391.aspx
      

  6.   


    那是明显的,要把你要访问的那个远程数据库的允许远程访问选项打开,默认是关闭的
    //设置显示全部高级选项
    EXEC sp_configure 'show advanced options', '1' RECONFIGURE 
    //显示
    EXEC sp_configure
    //设置允许远程访问
    EXEC sp_configure 'remote access', '1' RECONFIGURE 
      

  7.   

    创建链接成功  执行查询的时候出现这样错误--查询示例 
    select   *   from   srv_lnk.数据库名.dbo.表名 
    服务器: 消息 7403,级别 16,状态 1,行 1
    未能找到 OLE DB 提供程序 'SQLOLEDB ' 的注册表项。
    OLE DB 错误跟踪[Non-interface error:  Provider not registered.]。。
    请问问题出在那?
      

  8.   

    继续请教各位朋友,请问本地的服务器和远程的服务器该如何设置,想防火墙,是否允许远程,各种服务。。等等,虽然建立链接服务器成功了,但是点击左边表的时候总是出现这错误,
    服务器: 消息 7403,级别 16,状态 1,行 1
    未能找到 OLE DB 提供程序 'SQLOLEDB ' 的注册表项。
    OLE DB 错误跟踪[Non-interface error: Provider not registered.]。。
    ……

    或者是这个
    sql server  拒绝或者不允许访问,请朋友们给个详细的步骤,成功了另外加分 谢谢大家
      

  9.   

    继续请教各位朋友,请问本地的服务器和远程的服务器该如何设置,想防火墙,是否允许远程,各种服务。。等等,虽然建立链接服务器成功了,但是点击左边表的时候总是出现这错误,
    服务器: 消息 7403,级别 16,状态 1,行 1
    未能找到 OLE DB 提供程序 'SQLOLEDB ' 的注册表项。
    OLE DB 错误跟踪[Non-interface error: Provider not registered.]。。
    ……
    或者是这个
    sql server 拒绝或者不允许访问,请朋友们给个详细的步骤,成功了另外加分 谢谢大家
      

  10.   

    没关防火墙是这个错误  sql server 拒绝或者不允许访问,关了后就成这个错误了服务器: 消息 7403,级别 16,状态 1,行 1
    未能找到 OLE DB 提供程序 'SQLOLEDB ' 的注册表项。
    OLE DB 错误跟踪[Non-interface error: Provider not registered.]。。
    ……
    手工建个连接服务器也是这样请问主要错误原因出在什么地方
      

  11.   

    你把这些回复都试下应该是可以了,Non-interface error: Provider not registered.]。。那你就看你用的SQL Server是什么版本?你数据库是SQL Server吧?本地和远程的都是吧?版本都一样吧?如果是的话那2000里驱动是用SQLOLEDB,2005以后的好像就不是了,你就查下sp_addlinkedserver sp_addlinkedsrvlogin sp_dropserver这三个系统过程在你那版本的帮助吧,版本不一样,参数就稍有差别,关于防火墙,如果你在本地用查询分析器能够访问远程数据库的话就没必要去设置了。
    网络上基本没有现成的答案,有的是Idea
      

  12.   

    1------ 链接对方的数据库USE [master]
    GO
    EXEC master.dbo.sp_addlinkedserver      建立服务器之间的连接@server = N'CNTI1SRV141',                      需要链接的服务器是哪个@srvproduct=N'SQL Server'                       采用的连接方式是哪个GO
    EXEC master.dbo.sp_addlinkedsrvlogin     对已经链接的服务器进行登录@rmtsrvname = N'CNTI1SRV141',              Remote的服务器是哪个@locallogin = NULL ,                                  NULL 指定此项应用于连接到 rmtsrvname 的所有本地登录@useself = N'False',                          FALSE 指定 rmtuser 和 rmtpassword 参数用于连接到指定 locallogin 的 rmtsrvname@rmtuser = N'sa',                               被登录的服务器的用户名@rmtpassword = N'XXXXX'                 被登录的服务器的密码
    GOSelect * from [cnti1srv141].test.dbo.who     查询对方服务器上的数据库数据GoUSE [master]
    GO
    SP_droplinkedsrvlogin 'CNTI1SRV141','sa'       切断远程登录服务器的连接名以及本地具有取消远程登录的用户
    GO
    USE [master]
    GO
    sp_dropserver 'CNTI1SRV141','droplogins'        删除远程登录服务器在本地服务器的记录 问题解决了sql server之间的远程数据库查询问题,但如果是其他数据库 mysql 或oracle 则需要使用OLEB的方式来协议连接@srvproduct=N'SQL Server'      如果是oracle远程连接则使用  MSDAORA 如果是 access 可以使用microsoft.jet.OLEDB.4.0 ,mysql 可以采用 MSDASQL或SQLOLEDB
    本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/liuhuayang/archive/2010/08/02/5782719.aspx
      

  13.   

    2000 or 2005?mdac从MS官网上下载来装过了?系统的Remote Procedure Call (RPC)服务都打开了?
      

  14.   

    都是2000  RPC服务开着的,madc原来就有  服务器是移动公司的