declare @DataSource nvarchar(1000)
set @DataSource = 'Data Source=\\.\C:\10月数据源ah.xls;Extended properties=Excel 8.0'SELECT *
FROM OpenDataSource('Microsoft.Jet.OLEDB.4.0',@DataSource)...[XSSR$]

解决方案 »

  1.   

    declare @DataSource nvarchar(1000)
    set @DataSource = 'Data Source=\\192.168.1.103\D$\1.xls;Extended properties=Excel 8.0'EXEC('
    SELECT *
    FROM OpenDataSource(''Microsoft.Jet.OLEDB.4.0'','''+@DataSource+''')...[Test$]')
      

  2.   

    以上在我的环境测试OK。
    环境:
    ----------------------------------------------------------------------------------
    -- Author : htl258(Tony)
    -- Date   : 2010-07-18 19:01:28
    -- Version: Microsoft SQL Server 2008 (RTM) - 10.0.1600.22 (Intel X86) 
    --          Jul  9 2008 14:43:34 
    --          Copyright (c) 1988-2008 Microsoft Corporation
    --          Developer Edition on Windows NT 5.1 <X86> (Build 2600: Service Pack 2)
    -- Blog   : http://blog.csdn.net/htl258
    ----------------------------------------------------------------------------------
      

  3.   

    OPENDATASOURCE 函数可以在能够使用链接服务器名的相同 Transact-SQL 语法位置中使用。因此,就可以将 OPENDATASOURCE 用作四部分名称的第一部分,该名称指的是 SELECT、INSERT、UPDATE 或 DELETE 语句中的表或视图的名称;或者指的是 EXECUTE 语句中的远程存储过程。当执行远程存储过程时,OPENDATASOURCE 应该指的是另一个 SQL Server。OPENDATASOURCE 不接受参数变量。与 OPENROWSET 函数类似,OPENDATASOURCE 应该只引用那些不经常访问的 OLE DB 数据源。对于访问次数稍多的任何数据源,请为它们定义链接的服务器。无论 OPENDATASOURCE 还是 OPENROWSET 都不能提供链接的服务器定义的全部功能,例如,安全管理以及查询目录信息的能力。每次调用 OPENDATASOURCE 时,都必须提供所有的连接信息(包括密码)。
      

  4.   

    Data Source=\\.\C:\10月数据源ah.xls路径看上有问题
      

  5.   

    http://blog.csdn.net/ws_hgo/archive/2010/04/23/5518918.aspx/*
    openDatasource:不使用连接服务器的名称,而提供特殊的链接信息.
    使用 openDatasource的前提是仅当 DisallowAdhocAccess
    注册表选项针对指定的提供程序显式设置为 0,
    并且启用 Ad Hoc Distributed Queries 高级配置选项时,
    OPENDATASOURCE 才可用于访问 OLE DB 数据源中的远程数据。
    如果未设置这些选项,则默认行为不允许即席访问。
    */
    --代码如下:
    exec sp_configure 'show advanced options',1
    reconfigure
    exec sp_configure 'Ad Hoc Distributed Queries',1
    reconfigure
    --(1)例如现在我想打开D盘中BJData.mdb中的BJAdmin表的信息
    select ID,Title,OwnerName from
    opendataSource('Microsoft.Jet.OLEDB.4.0','Data Source="D:\BJData.mdb";')...BJAdmin
    /*Results:
    ID          Title                OwnerName
    ----------- -------------------- --------------------------------------------------
    1           xinrong             
    4           webmaster            admin
    5           bing                 webmaster
    (3 行受影响)
    */
    --(2)我现在要将BJAdmin中BJNewsCategory中的信息插入到A表中
    --先查询下Test.Newscategory
    select * from  Test.dbo.Newscategory
    /*
    ID          Title
    ----------- --------------------
    1           MSSQL
    (1 行受影响)
    */
    insert into Newscategory select Title from OpenDataSource
    ('Microsoft.Jet.OLEDB.4.0','Data Source="D:\BJData.mdb";')...BJNewsCategory
    --导入之后再查询
    select * from  Test.dbo.Newscategory
    /*
    ID          Title
    ----------- --------------------
    1           MSSQL
    2           新闻分类
    3           新闻动态
    4           工程案例
    5           膜结构知识
    6           在建工程
    (6 行受影响)
    */
    --上面的都是在MSSQL中查询 Access中的信息,现在将MSSQL中的信息导入到Access中去
    --(3)将 AdminInfo的信息插入到BJData.mdb中的BJAdmin中去
    select * from Test.dbo.AdminInfo
    /*
    ID          Title
    ----------- ------------------------------
    1           ws_hgo
    (1 行受影响)
    */
    insert into opendatasource('microsoft.Jet.OLEDB.4.0','Data source="D:/BJData.mdb"')...BJAdmin
    (Title,RoleID) select Title,1 from AdminInfo
    --然后查询BJAdmin表的信息
    select ID,Title,OwnerName from
    opendataSource('Microsoft.Jet.OLEDB.4.0','Data Source="D:\BJData.mdb";')...BJAdmin
    /*
    ID          Title                OwnerName
    ----------- -------------------- --------------------------------------------------
    1           xinrong             
    4           webmaster            admin
    5           bing                 webmaster
    12          ws_hgo               NULL
    (4 行受影响)
    */
    --(4)上面说的是Access与 MSSQl之间的操作现在操作下
    --Excel与MSSQL之间的操作
    --从Excel中读取信息
    select * from OpenDataSource
    ('Microsoft.Jet.OLEDB.4.0','Data Source="D:\work.et";Extended properties=Excel 5.0')...[sheet1$]
    /*
    EmployeeName        Sex            Age             Post
    -----------       -----------    --------      ------------
    ws_hgo             Boy            23             Senior Programmer
    yangzhognyuan      Boy            24             Programmer
    chenjing           Girl           24             Designer
    (3 行受影响)--(5)
    */
    /*将本地表中的信息导入到远程数据库表中
    下面的例子将本地 whsxjAdmin种的(Title,Password)插入到远程
    zhongyiAdmin中去
    */
    insert into opendatasource('SQLOLEDB','Data Source=IP地址;User ID=zhongyi;password=xinrongkeji').sqlzhongyi.dbo.zhongyiAdmin(Title,Password)
    select Title,Password from whsxjAdmin
    --下面说下OPENROWSET
    /*
    包含访问 OLE DB 数据源中的远程数据所需的全部连接信息。
    当访问链接服务器中的表时,这种方法是一种替代方法,
    并且是一种使用 OLE DB 连接并访问远程数据的一次性的临时方法。
    */
    --(1)直接查询远程服务器上面的信息
    select ID,Title from OpenRowset
    ('SQLOLEDB','IP地址';'zhongyi';'xinrongkeji','select * from sqlzhongyi.dbo.zhongyiAdmin') t
    --(2)查询Access里面的信息
    select * from OpenRowset
    ('microsoft.Jet.OLEDB.4.0','d:\BJData.mdb';'Admin';'',BJAdmin) as g