RT 
有没有什么好方法

解决方案 »

  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本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/ws_hgo/archive/2010/04/23/5518918.aspx
      

  2.   

    在做数据库系统开发时,特别是需要对数据库操作进行性能测试及优化时,我们就需要在数据库测试表中插入大量数据以便测试。对于这些数据的插入,这里通过实例展示如何通过存储过程进行实现。
     
          数据库表(userInfo)结构如下:
     
    CREATE TABLE [dbo].[userInfo] (
     [userID] [int] IDENTITY (1, 1) NOT NULL ,
     [roleType] [int] NULL ,
     [groupID] [int] NULL ,
     [userCode] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
     [userName] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
     [text1] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
     [text2] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
     [text3] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL 
    ) ON [PRIMARY]
    GO
     
        存储过程如下(这里是批量插入99000条数据,roleType,groupID两个字段为随机生成的0-5之间的数):
     
    CREATE PROCEDURE add_UserInfo
    AS
    DECLARE @userCode VARCHAR(30)
    DECLARE @userName VARCHAR(30)DECLARE @userCode_base VARCHAR(30)
    DECLARE @count INTEGER
    DECLARE @index INTEGER
    DECLARE @rand1 INTEGER
    DECLARE @rand2 INTEGER
    SET @userCode_base='qs_'
    SET @userName='userName'
    SET @count=100000
    SET @index=10000WHILE @index<@count
    BEGIN
     SET @userCode=@userCode_base+CONVERT(VARCHAR,@index)
     SET @rand1=convert(int,rand()*5)
     SET @rand2=convert(int,rand()*5)
     INSERT INTO userInfo (userCode,roleType,groupID,userName,text1,text2,text3)
     VALUES (@userCode,@rand1,@rand2,@userName,'aokei kaol jof','','aokei kaol jof')
     
     SET @index=@index+1
    END
    GO
      

  3.   

    用批量插入。   SQL的帮助文档可以参考一下,希望对你有所帮助!