Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 将csv字段拆分为多列_Sql Server_Csv - Fatal编程技术网

Sql server 将csv字段拆分为多列

Sql server 将csv字段拆分为多列,sql-server,csv,Sql Server,Csv,我有一个包含200000行数据的表。现场与会者已以csv格式填写;用逗号分隔符拆分。我想把这个字段分成7个不同的列,分别标记为Field1、Field2等 示例数据: 新格式 这篇评论太长了 我倾向于以逗号分隔的格式导出数据,然后重新导入。有了这些数据量,您可以执行以下操作: 运行示例中的select*或select pkEventBooking+,“+与会者 将数据复制到Excel中 转到“数据”功能区并选择“文本到列” 另存为文件 使用制表符分隔符导入文件 顺便说一下,我真的建议您将数据结构

我有一个包含200000行数据的表。现场与会者已以csv格式填写;用逗号分隔符拆分。我想把这个字段分成7个不同的列,分别标记为Field1、Field2等

示例数据: 新格式
这篇评论太长了

我倾向于以逗号分隔的格式导出数据,然后重新导入。有了这些数据量,您可以执行以下操作:

  • 运行示例中的
    select*或
    select pkEventBooking+,“+与会者
  • 将数据复制到Excel中
  • 转到“数据”功能区并选择“文本到列”
  • 另存为文件
  • 使用制表符分隔符导入文件
  • 顺便说一下,我真的建议您将数据结构为两列:

    • pkEventBooks
    • 与会者
    然后有多个列

    您可以直接在数据库中执行此操作:

    insert into EventAttendees(EventBookId, Attendee)
        select t.EventBookId, ss.Attendee
        from table t cross apply
             dbo.SplitString(Attendees) as ss(Attendee);
    
    您可以通过谷歌搜索“SQL Server splitstring”来获得此类函数的定义。

    测试数据 查询
    这段代码很棒,我只需要“开启ARITHABORT”,现在就可以了。做得好!!
    pkEventBooking   Field1   Field2   Field3    Field 4   Field5   Field6  Field7
    166935           p1193    c21867   c21827    c21963    c18069   c19222
    195867           p1193    c21827   c22572    c19222    c22573   c21963  c18069,
    
    insert into EventAttendees(EventBookId, Attendee)
        select t.EventBookId, ss.Attendee
        from table t cross apply
             dbo.SplitString(Attendees) as ss(Attendee);
    
    DECLARE @TABLE TABLE (pkEventBooking INT,  Attendees NVARCHAR(MAX))
    INSERT INTO @TABLE VALUES 
    (166935 , 'p1193,c21867,c21827,c21963,c18069,c19222'),
    (195867 , 'p1193,c21827,c22572,c19222,c22573,c21963,c18069')
    
    ;WITH Split_Names (pkEventBooking, Attendees)
    AS
    (
     SELECT pkEventBooking,
           CONVERT(XML,'<Attendees><Attendee>'  
       + REPLACE(Attendees,',', '</Attendee><Attendee>') + '</Attendee></Attendees>') AS Attendees
     FROM @Table
    )
    
     SELECT pkEventBooking,      
     Attendees.value('/Attendees[1]/Attendee[1]','varchar(100)') AS Attendees1,    
      Attendees.value('/Attendees[1]/Attendee[2]','varchar(100)') AS Attendees2,
       Attendees.value('/Attendees[1]/Attendee[3]','varchar(100)') AS Attendees3,
        Attendees.value('/Attendees[1]/Attendee[4]','varchar(100)') AS Attendees4,
         Attendees.value('/Attendees[1]/Attendee[5]','varchar(100)') AS Attendees5,
          Attendees.value('/Attendees[1]/Attendee[6]','varchar(100)') AS Attendees6,
           Attendees.value('/Attendees[1]/Attendee[7]','varchar(100)') AS Attendees7
     FROM Split_Names
    
    ╔════════╦════════════╦════════════╦════════════╦════════════╦════════════╦════════════╦════════════╗
    ║ Value  ║ Attendees1 ║ Attendees2 ║ Attendees3 ║ Attendees4 ║ Attendees5 ║ Attendees6 ║ Attendees7 ║
    ╠════════╬════════════╬════════════╬════════════╬════════════╬════════════╬════════════╬════════════╣
    ║ 166935 ║ p1193      ║ c21867     ║ c21827     ║ c21963     ║ c18069     ║ c19222     ║ NULL       ║
    ║ 195867 ║ p1193      ║ c21827     ║ c22572     ║ c19222     ║ c22573     ║ c21963     ║ c18069     ║
    ╚════════╩════════════╩════════════╩════════════╩════════════╩════════════╩════════════╩════════════╝