2016-03-23 5 views
0

Database Administrator」に同様の質問をしましたが、悲しいことに誰も質問に答えなかったため、データを転送することにしました。私は別の行としてそれぞれの値を持っていると思った1つの列の値をMySQLの異なる行に転送する

------------------------------------------------------ 
Parts | Owner | Number | Item_ID | ... 
------------------------------------------------------ 
PartB | Adam | 4  | Item_a,Item_b,Item_z,... 
ConD  | Steve | 2  | Item_b,Item_c,Item_g,... 

私はこのようなテーブル有する

this answerに基づい
------------------------------------------------------ 
Parts | Owner | Number | Item_ID | ... 
------------------------------------------------------ 
PartB | Adam | 4  | Item_a 
PartB | Adam | 4  | Item_b 
PartB | Adam | 4  | Item_z 
ConD  | Steve | 2  | Item_b 
ConD  | Steve | 2  | Item_c 
ConD  | Steve | 2  | Item_g 

を、私が試した:

SELECT Parts, 
     Owner, 
     Split.a.value('.', 'VARCHAR(100)') Item_ID 
FROM (SELECT Parts, 
       Owner, 
       Cast ('<M>' + Replace(Item_ID, ',', '</M><M>') + '</M>' AS XML) AS Data 
     FROM Table_1) AS A 
     CROSS APPLY Data.nodes ('/M') AS Split(a) 

しかし、エラーが発生します:

You have an error in your SQL syntax...near '('.', 'VARCHAR(100)')... 

答えて

0

C#のようなサードパーティの言語を使って簡単に実行できるのは、一度だけ実行する必要があるためです。 そしてさらに簡単に、この例ではDapperのような光のORMと:

[Table("TableA")] 
class table { 
    [Key] 
    int id {get; set;} 
    string Parts {get; set;} 
    string Owner {get; set;} 
    int Number {get; set;} 
    string Item_ID {get; set;} 
    ... 
} 

[Table("TableB")] 
class newtable { 
    [Key] 
    int id {get; set;} 
    string Parts {get; set;} 
    string Owner {get; set;} 
    int Number {get; set;} 
    string Item_ID {get; set;} 
    ... 
} 

Func<SqlConnection> conn =() => new SqlConnection("Data Source=127.0.0.1; Initial Catalog=;User Id=root;Password=***"); 
var newdata = new List<newtable>(); 
foreach (var d in conn().Query<table>("Select * FROM table")) 
{ 
    foreach (var cd in d.Item_ID.Split(',')) 
    { 
     newdata.Add(new newtable() { Parts = d.Parts, Owner = d.Owner, Number = d.Number, Item_ID = cd.Trim(), ... }); 
    } 
} 

//insert the new datas 
foreach (var data in newdata) { 
    conn().Insert(data); 
} 
+0

select文は、他のプログラムで実行するように私はそれをやろうとしました。 –

関連する問題