我在查询分析器里执行了下面的代码:
   EXEC sp_addlinkedserver 
   @server = [172.16.80.13], 
   @srvproduct='',
   @provider = 'SQLOLEDB.1', --'MSDASQL',
   @datasrc =NULL,
   @location=NULL,
   @provstr ='DRIVER={SQL Server};SERVER=Serv;UID=sa;PWD='
 
GO
我是想用SQL语句直接对远程数据库表进行操作:
例如:
select * from [172.16.80.13].Serv.dbo.tablename
我执行之后老是提示我sa登录错误,我是以sa登录,密码为空的.
请高手指点.......
如果要在VB程序中实现应该怎么调用这个存储过程?

解决方案 »

  1.   

    --访问不同电脑上的数据库(远程只要联好网就一样)
    --如果经常访问或数据量大,建议用链接服务器--创建链接服务器
    exec sp_addlinkedserver  'srv_lnk','','SQLOLEDB','远程服务器名或ip地址'
    exec sp_addlinkedsrvlogin 'srv_lnk','false',null,'用户名','密码'
    --exec sp_serveroption 'srv_lnk','rpc out','true' 这个允许调用链接服务器上的存储过程
    go--查询示例
    select * from srv_lnk.数据库名.dbo.表名--导入示例
    select * into 表 from srv_lnk.数据库名.dbo.表名go
    --以后不再使用时删除链接服务器
    exec sp_dropserver 'srv_lnk','droplogins'--如果只是临时访问,可以直接用openrowset
    --查询示例
    select * from openrowset('SQLOLEDB'
    ,'sql服务器名';'用户名';'密码'
    ,数据库名.dbo.表名)--导入示例
    select * into 表 from openrowset('SQLOLEDB'
    ,'sql服务器名';'用户名';'密码'
    ,数据库名.dbo.表名)
      

  2.   

    --先检测是否存在有连接
    if exists(select 1 from master.dbo.sysservers where srvname = 'server1')
    begin
      exec sp_droplinkedsrvlogin  'server1','sa'
      exec sp_dropserver  'server1'
    end
    EXEC sp_addlinkedserver 'server1','','MSDASQL',NULL,NULL,@connstrto21
    goselect top 1 * from server1.database1.dbo.table1
    --退出时释放你的连接
    if exists(select 1 from master.dbo.sysservers where srvname = 'server1')
    begin
      exec sp_droplinkedsrvlogin  'server1','sa'
      exec sp_dropserver  'server1'
    end
    go
      

  3.   

    请先到查询分析器中看一下你的语句是否能通过,如果可以了,你在VB中就可以直接对其操作了
    关于
    sp_addlinkedserver   请查看SQL的相关帮助
    示例
    A. 使用用于 SQL Server 的 Microsoft OLE DB 提供程序
    使用用于 SQL Server 的 OLE DB 创建链接服务器 
    下面的示例创建一台名为 SEATTLESales 的链接服务器,该服务器使用用于 SQL Server 的 Microsoft OLE DB 提供程序。USE master
    GO
    EXEC sp_addlinkedserver 
        'SEATTLESales',
        N'SQL Server'
    GO在 SQL Server 的实例上创建链接服务器 
    此示例在 SQL Server 的实例上创建一台名为 S1_instance1 的链接服务器,该服务器使用 SQL Server 的 Microsoft OLE DB 提供程序。EXEC    sp_addlinkedserver    @server='S1_instance1', @srvproduct='',
                                    @provider='SQLOLEDB', @datasrc='S1\instance1'B. 使用用于 Jet 的 Microsoft OLE DB 提供程序
    此示例创建一台名为 SEATTLE Mktg 的链接服务器。说明  本示例假设已经安装 Microsoft Access 和示例 Northwind 数据库,且 Northwind 数据库驻留在 C:\Msoffice\Access\Samples。
    USE master
    GO
    -- To use named parameters:
    EXEC sp_addlinkedserver 
       @server = 'SEATTLE Mktg', 
       @provider = 'Microsoft.Jet.OLEDB.4.0', 
       @srvproduct = 'OLE DB Provider for Jet',
       @datasrc = 'C:\MSOffice\Access\Samples\Northwind.mdb'
    GO
    -- OR to use no named parameters:
    USE master
    GO
    EXEC sp_addlinkedserver 
       'SEATTLE Mktg', 
       'OLE DB Provider for Jet',
       'Microsoft.Jet.OLEDB.4.0', 
       'C:\MSOffice\Access\Samples\Northwind.mdb'
    GOC. 使用用于 Oracle 的 Microsoft OLE DB 提供程序
    此示例创建一台名为 LONDON Mktg 的链接服务器,该服务器使用用于 Oracle 的 Microsoft OLE DB 提供程序,并且假设此 Oracle 数据库的 SQL*Net 别名为 MyServer。USE master
    GO
    -- To use named parameters:
    EXEC sp_addlinkedserver
       @server = 'LONDON Mktg',
       @srvproduct = 'Oracle',
       @provider = 'MSDAORA',
       @datasrc = 'MyServer'
    GO
    -- OR to use no named parameters:
    USE master
    GO
    EXEC sp_addlinkedserver 
       'LONDON Mktg', 
       'Oracle', 
       'MSDAORA',
       'MyServer'
    GOD. 将 data_source 参数与用于 ODBC 的 Microsoft OLE DB 提供程序一起使用
    此示例创建一台名为 SEATTLE Payroll 的链接服务器,该服务器使用用于 ODBC 的 Microsoft OLE DB 提供程序和 data_source 参数。说明  在执行 sp_addlinkedserver 之前,必须在服务器上将指定的 ODBC 数据源名称定义为系统 DSN。
    USE master
    GO
    -- To use named parameters:
    EXEC sp_addlinkedserver 
       @server = 'SEATTLE Payroll', 
       @provider = 'MSDASQL', 
       @datasrc = 'LocalServer'
    GO
    -- OR to use no named parameters:
    USE master
    GO
    EXEC sp_addlinkedserver 
       'SEATTLE Payroll', 
       '', 
       'MSDASQL',
       'LocalServer'
    GOE. 将 provider_string 参数与用于 ODBC 的 Microsoft OLE DB 提供程序一起使用
    此示例创建一台名为 LONDON Payroll 的链接服务器,该服务器使用用于 ODBC 的 Microsoft OLE DB 提供程序和 provider_string 参数。说明  有关 ODBC 连接字符串的更多信息,请参见 SQLDriverConnect 和如何分配句柄并与 SQL Server (ODBC) 连接。 
    USE master
    GO
    -- To use named parameters:
    EXEC sp_addlinkedserver 
       @server = 'LONDON Payroll', 
       @provider = 'MSDASQL',
       @provstr = 'DRIVER={SQL Server};SERVER=MyServer;UID=sa;PWD=;'
    GO
    -- OR to use no named parameters:
    USE master
    GO
    EXEC sp_addlinkedserver 
       'LONDON Payroll', 
       '', 
       'MSDASQL',
       NULL,
       NULL,
       'DRIVER={SQL Server};SERVER=MyServer;UID=sa;PWD=;'
    GOF. 在 Excel 电子表格上使用用于 Jet 的 Microsoft OLE DB 提供程序
    若要创建使用用于 Jet 的 Microsoft OLE DB 提供程序以访问 Excel 电子表格的链接服务器定义,请首先在 Excel 中创建一个命名的范围以指定要在 Excel 工作表中选择的行和列。然后,可将此范围的名称引用为分布式查询中的表名称。EXEC sp_addlinkedserver 'ExcelSource',
       'Jet 4.0',
       'Microsoft.Jet.OLEDB.4.0',
       'c:\MyData\DistExcl.xls',
       NULL,
       'Excel 5.0'
    GO为了访问 Excel 电子表格中的数据,请将某个范围内的单元与某个名称相关联。通过将范围的名称用作表名称,可以访问指定的已命名范围。下列查询利用前面设置的链接服务器,可访问称为 SalesData 的命名范围。SELECT *
    FROM EXCEL...SalesData
    GOG. 使用用于检索服务的 Microsoft OLE DB 提供程序
    此示例创建一台链接服务器,并且使用 OPENQUERY 从为检索服务启用的链接服务器和文件系统中检索信息。EXEC sp_addlinkedserver FileSystem,
       'Index Server',
       'MSIDXS',
       'Web'
    GO
    USE pubs
    GO
    IF EXISTS(SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES
          WHERE TABLE_NAME = 'yEmployees')
       DROP TABLE yEmployees
    GO
    CREATE TABLE yEmployees
     (
      id       int         NOT NULL,
      lname    varchar(30) NOT NULL,
      fname    varchar(30) NOT NULL,
      salary   money,
      hiredate datetime
     )
    GO
    INSERT yEmployees VALUES
     ( 
      10,
      'Fuller',
      'Andrew',
      $60000,
      '9/12/98'
     )
    GO
    IF EXISTS(SELECT TABLE_NAME FROM INFORMATION_SCHEMA.VIEWS
          WHERE TABLE_NAME = 'DistribFiles')
       DROP VIEW DistribFiles
    GO
    CREATE VIEW DistribFiles 
     AS
     SELECT *
     FROM OPENQUERY(FileSystem,
                     'SELECT Directory, 
                        FileName,
                        DocAuthor,
                        Size,
                        Create,
                        Write
                      FROM SCOPE('' "c:\My Documents" '')
                      WHERE CONTAINS(''Distributed'') > 0 
                        AND FileName LIKE ''%.doc%'' ')
     WHERE DATEPART(yy, Write) = 1998
    GO
    SELECT * 
    FROM DistribFiles
    GO
    SELECT Directory,
      FileName, 
      DocAuthor, 
      hiredate
    FROM DistribFiles D, yEmployees E
    WHERE D.DocAuthor = E.FName + ' ' + E.LName
    GOH. 使用用于 Jet 的 Microsoft OLE DB 提供程序访问文本文件
    此示例创建一台直接访问文本文件的链接服务器,而没有将这些文件链接为 Access .mdb 文件中的表。提供程序是 Microsoft.Jet.OLEDB.4.0,提供程序字符串为"Text"。数据源是包含文本文件的目录的完整路径名。schema.ini 文件(描述文本文件的结构)必须与此文本文件存在于相同的目录中。有关创建 schema.ini 文件的更多信息,请参见 Jet 数据库引擎文档。--Create a linked server
    EXEC sp_addlinkedserver txtsrv, 'Jet 4.0', 
       'Microsoft.Jet.OLEDB.4.0',
       'c:\data\distqry',
       NULL,
       'Text'
    GO--Set up login mappings
    EXEC sp_addlinkedsrvlogin txtsrv, FALSE, Admin, NULL
    GO--List the tables in the linked server
    EXEC sp_tables_ex txtsrv
    GO--Query one of the tables: file1#txt
    --using a 4-part name 
    SELECT * 
    FROM txtsrv...[file1#txt]I. 使用用于 DB2 的 Microsoft OLE DB 提供程序
    下面的示例创建一台名为 DB2 的链接服务器,该服务器使用用于 DB2 的 Microsoft OLE DB 提供程序。EXEC sp_addlinkedserver
       @server='DB2',
       @srvproduct='Microsoft OLE DB Provider for DB2',
       @catalog='DB2',
       @provider='DB2OLEDB',
       @provstr='Initial Catalog=PUBS;Data Source=DB2;HostCCSID=1252;Network Address=XYZ;Network Port=50000;Package Collection=admin;Default Schema=admin;'