sql数据导入到access问题
数据结构不同
一个列多一个列少
但列名都是一样的

解决方案 »

  1.   

    /*
    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