2015年7月23日 星期四

Create linked server to MS Access database


https://msdn.microsoft.com/zh-tw/library/ms190479(v=sql.120).aspx
https://msdn.microsoft.com/zh-tw/library/ff772782(v=sql.120).aspx

EXEC sp_addlinkedserver
   @server = N'Access',
   @provider = N'Microsoft.Jet.OLEDB.4.0',
   @srvproduct = N'OLE DB Provider for Jet',
   @datasrc = N'D:\F2\App_Data\ya.mdb';
GO

Create linked server to MS Access database

Now in the provider name select Microsoft.Jet.OLEDB.4.0 Provider (OLEDB is faster then ODBC AFAIK)
Specify a linked server name you wish
Datasource will the Path to mdb file Ex: "c:\test.mdb"
Product Name will be "Access"

Else you can try below T-SQL too
exec sp_addlinkedserver @server='Access',
@srvproduct='Access',
@provider='Microsoft.Jet.OLEDB.4.0',
@datasrc='c:\test.mdb'

exec sp_addlinkedsrvlogin @rmtsrvname='Access', 
@useself='false', 
@rmtuser='Admin', 
@rmtpassword=''

Regarding login use Username Admin and NULL as password when you trying in GUI.

Now to get the remote table run below T-SQl
sp_tableex N'Access'

For more explanation on T-SQL and Linked Servers, Refer to BOL...

sp_addlinkedserver
建立連結伺服器。連結伺服器可讓您對 OLE DB 資料來源存取分散式異質性查詢。
sp_addlinkedserver 
  @server = 'server' ,
    -- 要建立的連結伺服器名稱。
  @srvproduct = 'product_name' ,
    -- 加入的 OLE DB 資料來源產品名稱。
    -- nvarchar(128),預設值是 NULL。
  @provider = 'provider_name' ,
    -- 唯一程式化識別碼 (PROGID)。
    -- nvarchar(128),預設值是 NULL。
  @datasrc = 'data_source' , 
    -- 資料來源名稱。
    -- nvarchar(4000),DBPROP_INIT_DATASOURCE 屬性。
  @location = 'location' , 
    -- 資料庫位置。
    -- nvarchar(4000),預設值是 NULL,DBPROP_INIT_LOCATION 屬性。
  @provstr = 'provider_string' , 
    -- 連接字串,用來識別唯一資料來源。
    -- nvarchar(4000),預設值是 NULL,DBPROP_INIT_PROVIDERSTRING 屬性。

  @catalog = 'catalog'
    -- 所用的目錄。
    -- 是 sysname,預設值是 NULL,DBPROP_INIT_CATALOG 屬性。
傳回碼值0 (成功) 或 1 (失敗)
權限:需要伺服器的 ALTER ANY LINKED SERVER 權限。
資料來源產品名稱如果是 SQL Server,則不必指定 provider_name、data_source、location、provider_string 和 catalog。
連結伺服器資料紀錄於 master.dbo.sysservers 中。
sp_dropserver
從 SQL Server 本機執行個體上的已知遠端和連結伺服器清單中移除伺服器。 
sp_dropserver   @server = 'server' , 
    -- 要移除的伺服器  @droplogins = {'droplogins' | NULL} 
    -- 如果指定了 droplogins,也必須移除 server 的相關遠端和連結伺服器登入
    -- char(10),預設值是 NULL。
傳回碼值0 (成功) 或 1 (失敗)
權限:需要伺服器的 ALTER ANY LINKED SERVER 權限。
若要在移除伺服器時移除伺服器的所有遠端和連結伺服器登入,請使用 droplogins 引數。
[範例] 連接到 SQL Server,建立一個名叫 SEATTLESales 的連結伺服器。
 EXEC sp_addlinkedserver 
   'SEATTLESales',
   N'SQL Server'
[範例] 連接到 Microsoft Access 2002-2003
 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'
[範例] 連接到 Microsoft Access 2007
 EXEC sp_addlinkedserver   @server = 'SEATTLE Mktg', 
  @provider = Microsoft.ACE.OLEDB.12.0', 
  @srvproduct = 'OLE DB Provider for ACE',
  @datasrc = 'C:\MSOffice\Access\Samples\Northwind.accdb'
[範例] 連接到 Microsoft Excel 1997 - 2003
 EXEC sp_addlinkedserver 
  'ExcelShare',
  'Jet 4.0',
  'Microsoft.Jet.OLEDB.4.0',
  '\\MyServer\MyShare\Spreadsheets\DistExcl.xls',
  NULL,
  'Excel 5.0'
[範例] 連接到 Microsoft Excel 2007
EXEC sp_addlinkedserver   @server = N'ExcelDataSource', 
  @srvproduct=N'ExcelData', 
  @provider=N'Microsoft.ACE.OLEDB.12.0', 
  @datasrc=N'C:\DataFolder\People.xlsx',
  @provstr='EXCEL 12.0' ;
[範例] 連接到 Oracle,建立一個名為 LONDON Mktg 的連結伺服器
 EXEC sp_addlinkedserver
  @server = 'LONDON Mktg',
  @srvproduct = 'Oracle',
  @provider = 'MSDAORA',
  @datasrc = 'MyServer'
[範例] 連接到 ODBC,建立一個名為 SEATTLE Payroll 的連結伺服器
 EXEC sp_addlinkedserver 
  @server = 'SEATTLE Payroll', 
  @srvproduct = '',
  @provider = 'MSDASQL', 
  @datasrc = 'LocalServer'
[範例] 連接到 DB2
 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;'
[範例] 連接到 文字檔
 --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 four-part name.
 
SELECT * 
FROM txtsrv...[file1#txt]
[範例] 移除遠端伺服器 ACCOUNTS 和所有相關聯的遠端登入。
 EXEC sp_dropserver 'ACCOUNTS', 'droplogins';

沒有留言:

張貼留言