zoukankan      html  css  js  c++  java
  • 使用OPENROWSET(BULK...)从平面文件加载数据

    要使用OPENROWSET首先要开启一个configure选项

    sp_configure ‘show advanced options’, 1;
    GO
    RECONFIGURE;
    GO
    sp_configure ‘Ad Hoc Distributed Queries’, 1; --Switch on specific functionality
    GO
    RECONFIGURE;
    GO

    OPENROWSET可以把整个flatfile读取成二进制数据流,这个时候你需要自己再用cast+substring的方法去截取数据成为栏位

    SELECT *, CAST(BulkColumn as varchar(max)) FROM OPENROWSET(BULK N'D:Test.txt', SINGLE_BLOB) AS Document;

    另一种做法是用formatfile,这样select出来的数据栏位已经按formatfile定义好的格式显示出来

    SELECT a.* FROM OPENROWSET( BULK 'D:Test.txt', FORMATFILE = 'D: est.fmt') AS a;

    那formatfile怎么生成的呢?

    bcp JerryDB.dbo.ssis_merge_test format nul -c -f D: est.fmt -S JERRYCHENLAPMSSQLSERVER2014 -T

    上面的命令行生成下面的数据到D: est.fmt这个文件

    10.0
    3
    1 SQLCHAR 0 24 " " 1 col1 ""
    2 SQLCHAR 0 100 " " 2 col2 Chinese_PRC_CI_AS
    3 SQLCHAR 0 12 " " 3 col3 ""

    加个-x可以变成xml格式的

    bcp JerryDB.dbo.ssis_merge_test format nul -c -x -f D: est.fmt -S JERRYCHENLAPMSSQLSERVER2014 -T

    上面的命令行生成下面的数据到D: est.fmt这个文件

    <?xml version="1.0"?>
    <BCPFORMAT xmlns="http://schemas.microsoft.com/sqlserver/2004/bulkload/format" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <RECORD>
    <FIELD ID="1" xsi:type="CharTerm" TERMINATOR=" " MAX_LENGTH="24"/>
    <FIELD ID="2" xsi:type="CharTerm" TERMINATOR=" " MAX_LENGTH="100" COLLATION="Chinese_PRC_CI_AS"/>
    <FIELD ID="3" xsi:type="CharTerm" TERMINATOR=" " MAX_LENGTH="12"/>
    </RECORD>
    <ROW>
    <COLUMN SOURCE="1" NAME="col1" xsi:type="SQLDATETIME"/>
    <COLUMN SOURCE="2" NAME="col2" xsi:type="SQLNVARCHAR"/>
    <COLUMN SOURCE="3" NAME="col3" xsi:type="SQLINT"/>
    </ROW>
    </BCPFORMAT>

    参考:

    创建格式化文件

    https://technet.microsoft.com/zh-cn/library/ms191516(v=sql.90).aspx 

    OPENROWSET (Transact-SQL)

    https://msdn.microsoft.com/zh-cn/library/ms190312.aspx

    使用格式化文件大容量导入数据

    https://technet.microsoft.com/zh-cn/library/ms178129(SQL.90).aspx

  • 相关阅读:
    CentOS6.4 64位系统安装jdk
    oracle安装界面中文乱码解决
    亦步亦趋在CentOS 6.4下安装Oracle 11gR2(x64)
    CentOS 6.3(x86_64)下安装Oracle 10g R2
    Spring中映射Mongodb中注解的解释
    MongoDB 创建基础索引、组合索引、唯一索引以及优化
    MongoDB 用MongoTemplate查询指定时间范围的数据
    Java获取泛化类型
    SpringBoot标准Properties
    java如何获取一个对象的大小【转】
  • 原文地址:https://www.cnblogs.com/jenrrychen/p/4574488.html
Copyright © 2011-2022 走看看