zoukankan      html  css  js  c++  java
  • (4.10)sql server导入导出

    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 可自引用,还可在同一查询中引用多次。
    更多请点击:technet

    示例如下:

    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 不使用链接的服务器名,而提供特殊的连接信息,并将其作为四部分对象名的一部分。 而OpenRowSet 包含访问 OLE DB 数据源中的远程数据所需的全部连接信息。当访问链接服务器中的表时,这种方法是一种替代方法,并且是一种使用 OLE DB 连接并访问远程数据的一次性的、特殊的方法。可以在查询的 FROM 子句中像引用表那样引用 OpenRowSet 函数。依据 OLE DB 提供程序的能力,还可以将 而OpenRowSet 函数引用为 INSERT、UPDATE 或 DELETE 语句的目标表。尽管查询可能返回多个结果集,然而OPENROWSET 只返回第一个。更多请点击:technet

    示例如下:

    --启用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允许用户以其指定的格式将数据文件导入到数据库表或视图中。更多请点击:technet

    示例如下:

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

    4.bcp(https://www.cnblogs.com/hank-chen/p/6282742.html)

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

    示例如下:

    --打开高级选项
    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创建测试数据

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

    导入数据总结

    –EOF–

    原文地址:

    题图来自:原创,By Robin Wen

  • 相关阅读:
    install source mysql 5.7.9
    直接复制php的安装目录部署到其他服务器的时候,无法运行
    对硬盘进行分区时,GPT和MBR有什么区别?
    centos添加永久静态路由
    Windows2008R2安装远程桌面终端授权
    nginx搭建的cdn服务器的nginx.conf配置文件
    centos6.6配置vlan三层交换
    ESXI 6.0 嵌套虚拟化 Hyper-v
    VLAN的Hybrid和Trunk端口有何区别
    如何添加使用博客RSS订阅
  • 原文地址:https://www.cnblogs.com/gered/p/9431890.html
Copyright © 2011-2022 走看看