Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.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 如何使用SELECT insert插入多行_Sql_Sql Server_Tsql - Fatal编程技术网

Sql 如何使用SELECT insert插入多行

Sql 如何使用SELECT insert插入多行,sql,sql-server,tsql,Sql,Sql Server,Tsql,我正在将数据从一个包含用于存储多个字符串的列的表转换为一个新表,该表中的每个字符串都有一行 其中,格式为查找表,数据为映射表 旧格式 DataId FormatId 1 1 FormatID Name 1 'A B C D' 新格式 DataId FormatId 1 1 1 2 1 3 1 4 Format

我正在将数据从一个包含用于存储多个字符串的列的表转换为一个新表,该表中的每个字符串都有一行

其中,格式为查找表,数据为映射表

旧格式

DataId FormatId
  1       1

FormatID    Name
   1      'A B C D'
新格式

 DataId        FormatId
    1             1
    1             2
    1             3
    1             4

 FormatID        Name
    1            'A'
    2            'B'
    3            'C'
    4            'D'

我正在寻找“最好”的方法来实现这一点。

使用以下
拆分函数:

分裂函数 结果集
在旧格式中,值是如何分隔的?有空格吗?@BrentD是的。我已经将查找信息作为单独的行插入,我只需要将它们映射到正确的ID并将它们插入映射表中谢谢!让我把这张照片和照片交给你,我会向你汇报的
CREATE FUNCTION Split  
(  
  @delimited nvarchar(max),  
  @delimiter nvarchar(100)  
) RETURNS @t TABLE  
(  
-- Id column can be commented out, not required for sql splitting string  
  id int identity(1,1), -- I use this column for numbering splitted parts  
  val nvarchar(max)  
)  
AS  
BEGIN  
  declare @xml xml  
  set @xml = N'<root><r>' + replace(@delimited,@delimiter,'</r><r>') + '</r></root>'  

  insert into @t(val)  
  select  
    r.value('.','varchar(max)') as item  
  from @xml.nodes('//root/r') as records(r)  

  RETURN  
END 
DECLARE @Original_Table1 TABLE (DataID INT , FormatID INT)
INSERT INTO @Original_Table1 Values (1 ,1),(1 ,2)

DECLARE @Original_Table2 TABLE (FormatID INT , Name VARCHAR(100))
INSERT INTO @Original_Table2 Values (1 ,'A B C D')
                                    ,(2 ,'E F G H')

-- INSERT INTO NewTable bla bla.....    
SELECT   t1.DataID
        ,t2.FormatID AS FormatID_OLD
        ,c.id AS FormatID_new 
        ,t2.Name AS Name_Old
       ,c.val AS Name
FROM @Original_Table2 t2 
                 CROSS APPLY dbo.Split(t2.Name , ' ')c
INNER JOIN @Original_Table1 t1 ON t2.FormatID = t1.FormatID
╔════════╦══════════════╦══════════════╦══════════╦══════╗
║ DataID ║ FormatID_OLD ║ FormatID_new ║ Name_Old ║ Name ║
╠════════╬══════════════╬══════════════╬══════════╬══════╣
║      1 ║            1 ║            1 ║ A B C D  ║ A    ║
║      1 ║            1 ║            2 ║ A B C D  ║ B    ║
║      1 ║            1 ║            3 ║ A B C D  ║ C    ║
║      1 ║            1 ║            4 ║ A B C D  ║ D    ║
║      1 ║            2 ║            1 ║ E F G H  ║ E    ║
║      1 ║            2 ║            2 ║ E F G H  ║ F    ║
║      1 ║            2 ║            3 ║ E F G H  ║ G    ║
║      1 ║            2 ║            4 ║ E F G H  ║ H    ║
╚════════╩══════════════╩══════════════╩══════════╩══════╝