加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

SQLServer 数据导入导出的几种方法小结

发布时间:2020-12-12 09:31:54 所属栏目:MsSql教程 来源:网络整理
导读:SQL Server导入导出向导,这种方式是最方便的. 导入向导,微软提供了多种数据源驱动,包括SQL Server Native Cliant,OLE DB For Oracle,Flat File Source,Access,Excel,XML等,基本上可以满足系统开发的需求. 同样导出向导也有同样多的目的源驱动,可以把数据导入
  1. SQL Server导入导出向导,这种方式是最方便的.

    导入向导,微软提供了多种数据源驱动,包括SQL Server Native Cliant,OLE DB For Oracle,Flat File Source,Access,Excel,XML等,基本上可以满足系统开发的需求.
    同样导出向导也有同样多的目的源驱动,可以把数据导入到不同的目的源.
    对数据库管理人员来说这种方式简单容易操作,导入时SQL Server也会帮你建立相同结构的Table.
    2. 用.NET的代码实现(比如有一个txt或是excel的档案,到读取到DB中)
    2.1 最为常见的就是循环读取txt的内容,然后一条一条的塞入到Table中.这里不再赘述.
    2.2 集合整体读取,使用OLEDB驱动. 代码如下:
    <div class="codetitle"><a style="CURSOR: pointer" data="13785" class="copybut" id="copybut13785" onclick="doCopy('code13785')"> 代码如下:<div class="codebody" id="code13785">
    string strOLEDBConnect = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:1;Extended Properties='text;HDR=Yes;FMT=Delimited'";
    OleDbConnection conn = new OleDbConnection(strOLEDBConnect);
    conn.Open();
    SQLstmt = "select from 1.txt";//读取.txt中的数据
    DataTable dt=new DataTable();
    OleDbDataAdapter da = new OleDbDataAdapter(SQLstmt,conn);
    da.Fill(dt);//在DataSet的指定范围中添加或刷新行以匹配使用DataSet、DataTable 和IDataReader 名称的数据源中的行。
    if(dt.Rows.Count>0)
    foreach(DataRow dr in dt.Rows)
    {
    SQLstmt = "insert into MyTable values('" + dr..."

    3.BCP,可以用作大容量的数据导入导出,也可以配合xp_cmdshell来使用.
    语法: BCP语法
    <div class="codetitle"><a style="CURSOR: pointer" data="5499" class="copybut" id="copybut5499" onclick="doCopy('code5499')"> 代码如下:<div class="codebody" id="code5499">
    bcp {[[database_name.][schema].]{table_name | view_name} | "query"}
    {in | out | queryout | format} data_file
    [-mmax_errors] [-fformat_file] [-x] [-eerr_file]
    [-Ffirst_row] [-Llast_row] [-bbatch_size]
    [-ddatabase_name] [-n] [-c] [-N] [-w] [-V (70 | 80 | 90 )]
    [-q] [-C { ACP | OEM | RAW | code_page } ] [-tfield_term]
    [-rrow_term] [-iinput_file] [-ooutput_file] [-apacket_size]
    [-S [server_name[instance_name]]] [-Ulogin_id] [-Ppassword]
    [-T] [-v] [-R] [-k] [-E] [-h"hint [,...n]"]

    请注意数据导入导出的方向参数:in,out,queryout 如:

    如:

    4.BULK INSERT. T-SQL的命令,允许直接导入数据
    语法:
    <div class="codetitle"><a style="CURSOR: pointer" data="83473" class="copybut" id="copybut83473" onclick="doCopy('code83473')"> 代码如下:<div class="codebody" id="code83473">
    BULK INSERT
    [ database_name. [ schema_name ] . | schema_name. ] [ table_name | view_name ]
    FROM 'data_file'
    [ WITH
    (
    [ [,] BATCHSIZE =batch_size ]
    [ [,] CHECK_CONSTRAINTS ]
    [ [,] CODEPAGE = { 'ACP' | 'OEM' | 'RAW' | 'code_page' } ]
    [ [,] DATAFILETYPE =
    { 'char' | 'native'| 'widechar' | 'widenative' } ]
    [ [,] FIELDTERMINATOR = 'field_terminator' ]
    [ [,] FIRSTROW = first_row ]
    [ [,] FIRE_TRIGGERS ]
    [ [,] FORMATFILE ='format_file_path' ]
    [ [,] KEEPIDENTITY ]
    [ [,] KEEPNULLS ]
    [ [,] KILOBYTES_PER_BATCH =kilobytes_per_batch ]
    [ [,] LASTROW =last_row ]
    [ [,] MAXERRORS =max_errors ]
    [ [,] ORDER ( { column [ ASC | DESC ] } [,...n ] ) ]
    [ [,] ROWS_PER_BATCH =rows_per_batch ]
    [ [,] ROWTERMINATOR ='row_terminator' ]
    [ [,] TABLOCK ]
    [ [,] ERRORFILE ='file_name' ]
    )]

    重要参数:
    FIELDTERMINATOR,字段分隔符
    FIRSTROW:第一个数据行
    ROWTERMINATOR:行终结符
    如: <div class="codetitle"><a style="CURSOR: pointer" data="22994" class="copybut" id="copybut22994" onclick="doCopy('code22994')"> 代码如下:<div class="codebody" id="code22994">
    BULK INSERT dbo.ImportTest
    FROM 'C:ImportData.txt'
    WITH ( FIELDTERMINATOR =',',FIRSTROW = 2 )
    5. OPENROWSET也是T-SQL的命令,包含有DB连接的信息和其它导入方法不同的是,OPENROWSET可以作为一个目标表参与INSERT,UPDATE,DELETE操作.
    语法:
    <div class="codetitle"><a style="CURSOR: pointer" data="4431" class="copybut" id="copybut4431" onclick="doCopy('code4431')"> 代码如下:<div class="codebody" id="code4431">
    OPENROWSET
    ( { 'provider_name',{ 'datasource';'user_id';'password'
    | 'provider_string' }
    ,{ [ catalog. ] [ schema. ] object
    | 'query'
    }
    | BULK 'data_file',
    { FORMATFILE ='format_file_path' [ ]
    | SINGLE_BLOB | SINGLE_CLOB | SINGLE_NCLOB }
    } ) ::=
    [,CODEPAGE = { 'ACP' | 'OEM' | 'RAW' | 'code_page' } ]
    [,ERRORFILE ='file_name' ]
    [,FIRSTROW = first_row ]
    [,LASTROW = last_row ]
    [,MAXERRORS = maximum_errors ]
    [,ROWS_PER_BATCH =rows_per_batch ]

    如:
    <div class="codetitle"><a style="CURSOR: pointer" data="86678" class="copybut" id="copybut86678" onclick="doCopy('code86678')"> 代码如下:<div class="codebody" id="code86678">
    INSERT INTO dbo.ImportTest
    SELECT
    FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',
    'Excel 8.0;Database=C:ImportData.xls','SELECT FROM [Sheet1$]' WHERE A1 IS NOT NULL)

    6.OPENDATASOURCE
    语法:
    OPENDATASOURCE ( provider_name,init_string )
    如:
    <div class="codetitle"><a style="CURSOR: pointer" data="13381" class="copybut" id="copybut13381" onclick="doCopy('code13381')"> 代码如下:<div class="codebody" id="code13381">
    INSERT INTO dbo.ImportTest
    SELECT
    FROM OPENDATASOURCE('Microsoft.Jet.OLEDB.4.0',
    'Data Source=C:ImportData.xls;Extended Properties=Excel 8.0')...[Sheet1$]

    7.OPENQUERY.是在linked server的基础上执行的查询.所以执行之前必须先建立好link server.OPENQUERY的结果集可以作为一个table参与DML的操作.
    语法:
    OPENQUERY (linked_server,'query')
    如:
    <div class="codetitle"><a style="CURSOR: pointer" data="33271" class="copybut" id="copybut33271" onclick="doCopy('code33271')"> 代码如下:<div class="codebody" id="code33271">
    EXEC sp_addlinkedserver 'ImportData',
    'Jet 4.0','Microsoft.Jet.OLEDB.4.0',
    'C:ImportData.xls',
    NULL,
    'Excel 8.0'
    GO
    INSERT INTO dbo.ImportTest
    SELECT
    FROM OPENQUERY(ImportData,'SELECT
    FROM [Sheet1$]')
    以上只是简单总结的一些DB数据导入导出的方法及其一些简单的实例,希望对你实践中会有所帮助.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读