• SQL Server高速导入数据分享


    SQL Server高速导入数据,能够尝试的方法例如以下:CTE、OpenRowSet/OpenDataSource、BULK INSERT、bcp、Shell。

    以下依次介绍这几种办法。



    1.CTE

    首先。我们看看什么是CTE。

    公用表表达式(Common Table Expression)是SQL SERVER 2005版本号之后引入的一个特性。

    CTE能够看作是一个暂时的结果集,能够在接下来的一个SELECT,INSERT,UPDATE,DELETE,MERGE语句中被多次引用。使用公用表达式能够让语句更加清晰简练。

    CTE 与派生表相似,详细表如今不存储为对象,而且仅仅在查询期间有效。与派生表的不同之处在于。CTE 可自引用,还可在同一查询中引用多次。
    很多其它请点击:http://technet.microsoft.com/zh-cn/library/ms190766(v=sql.105).aspx


    示比例如以下:

    USE AdventureWorks2008R2;
    GO
    -- Define the CTE expression name and column list.
    WITH Sales_CTE (SalesPersonID, SalesOrderID, SalesYear)
    AS
    -- Define the CTE query.
    (
        SELECT SalesPersonID, SalesOrderID, YEAR(OrderDate) AS SalesYear
        INTO #temp1
        FROM Sales.SalesOrderHeader
        WHERE SalesPersonID IS NOT NULL
    )
    -- Define the outer query referencing the CTE name.
    SELECT SalesPersonID, COUNT(SalesOrderID) AS TotalSales, SalesYear
    INTO #temp2
    FROM Sales_CTE
    GROUP BY SalesYear, SalesPersonID
    ORDER BY SalesPersonID, SalesYear;
    GO


    2.OpenRowSet/OpenDataSource

    OpenRowSet和OpenDataSource都能够訪问远程的数据库,但详细表现上,二者还是有区别的。OpenDataSource 不使用链接的server名,而提供特殊的连接信息,并将其作为四部分对象名的一部分。 而OpenRowSet 包括訪问 OLE DB 数据源中的远程数据所需的所有连接信息。

    当訪问链接server中的表时,这样的方法是一种替代方法,而且是一种使用 OLE DB 连接并訪问远程数据的一次性的、特殊的方法。能够在查询的 FROM 子句中像引用表那样引用 OpenRowSet 函数。根据 OLE DB 提供程序的能力。还能够将 而OpenRowSet 函数引用为 INSERT、UPDATE 或 DELETE 语句的目标表。虽然查询可能返回多个结果集,然而OPENROWSET 仅仅返回第一个。很多其它请点击:http://technet.microsoft.com/en-us/library/ms179856.aspx


    示比例如以下:

    --启用Ad Hoc Distributed Queries
    EXEC SP_CONFIGURE 'show advanced options',1
    RECONFIGURE
    EXEC SP_CONFIGURE 'Ad Hoc Distributed Queries',1
    RECONFIGURE
    --使用OpenDataSource导入数据
    INSERT INTO IMP_DATA.dbo.t_goods
    SELECT * 
    FROM OpenDataSource( 'Microsoft.Jet.OLEDB.12.0', 
    'Data Source="E:/Report1.txt";User ID=Admin;Password=;Extended properties=Excel 12.0')...[Sheet1$]
    --使用完成后,切记关闭它。由于这是一个安全隐患
    EXEC SP_CONFIGURE 'Ad Hoc Distributed Queries',0
    RECONFIGURE
    EXEC SP_CONFIGURE  'show advanced options',0
    RECONFIGURE 


    3.BULK INSERT

    BULK INSERT同意用户以其指定的格式将数据文件导入到数据库表或视图中。很多其它请点击:http://msdn.microsoft.com/zh-cn/library/ms188365.aspx


    示比例如以下:
    --定义导入目的和导入源
    BULK INSERT IMP_DATA.dbo.t_goods FROM 'E:/Report1.txt' 
    WITH ( 
      --列分隔符
      FIELDTERMINATOR = ',',
      --行分隔符
      ROWTERMINATOR = '
    '  
    )


    4.bcp

    bcp 有用工具能够在 Microsoft SQL Server 实例和用户指定格式的数据文件间大容量复制数据。 使用 bcp 有用工具能够将大量新行导入 SQL Server 表。或将表数据导出到数据文件。 除非与 queryout 选项一起使用,否则使用该有用工具不须要了解 Transact-SQL 知识。 若要将数据导入表中,必须使用为该表创建的格式文件,或者必须了解表的结构以及对于该表中的列有效的数据类型。


    很多其它请点击:http://msdn.microsoft.com/zh-cn/library/ms162802.aspx


    示比例如以下:

    --打开高级选项
    EXEC SP_CONFIGURE 'show advanced options', 1;
    RECONFIGURE;
    --启用运行CMD命令
    EXEC SP_CONFIGURE 'xp_cmdshell', 1;
    RECONFIGURE;
    
    --指定导入目的和导入源
    EXEC master..xp_cmdshell 'BCP IMP_DATA.dbo.t_goods in E:
    eport.txt -c -T'


    5.Shell


    Shell通过拼接插入字符串的方法非常灵活,而且出错较少。但插入的内容包括非常多非法字符的话会非常恼。

    能够參考曾经写的文章:缺乏导入数据权限,SQL Server创建測试数据


    最后,贴张前段时间做的图。导入数据总结:



    Good Luck!


  • 相关阅读:
    几种常用的曲线
    0188. Best Time to Buy and Sell Stock IV (H)
    0074. Search a 2D Matrix (M)
    0189. Rotate Array (E)
    0148. Sort List (M)
    0859. Buddy Strings (E)
    0316. Remove Duplicate Letters (M)
    0452. Minimum Number of Arrows to Burst Balloons (M)
    0449. Serialize and Deserialize BST (M)
    0704. Binary Search (E)
  • 原文地址:https://www.cnblogs.com/yxysuanfa/p/7106719.html
Copyright © 2020-2023  润新知