static void Main(string[] args) { ZMCMSv2_SysEntities db_zmcmsv2 = new ZMCMSv2_SysEntities(); OYClass myClass = new OYClass(); var tb_us = (from us in db_zmcmsv2.UploadServer orderby us.USLoadDateTime where us.USServerStatus == "S" select new { us.USRowid, us.USHospRowid, us.USHospID, us.USLoadFilename }); foreach (var r in tb_us) { //Console.WriteLine(r.USRowid.ToString()); //Console.WriteLine(r.USHospRowid.ToString()); //Console.WriteLine(r.USHospID.ToString()); //Console.WriteLine(r.USLoadFilename.ToString()); //Console.ReadLine(); // 取得醫事機構代碼 //var tb_sh = (from sh in db_zmcms.SysHospital where sh.HospRowid == r.USHospRowid.ToString() // select new { sh.HospID }).First(); //Console.WriteLine(tb_sh.HospID.ToString()); //Console.ReadLine(); // 開始 // 讀取 XML XmlDocument doc = new XmlDocument(); doc.Load(@"D:\ZeroMedRD\ZMCMSv2Sys\ZMCMSv2Sys\FileCloud\UploadFile\HITemp\" + r.USLoadFilename.ToString()); XmlNodeList NodeList = doc.SelectNodes("outpatient"); string sText = String.Empty; sText = "<" + doc.DocumentElement.Name + ">"; foreach (XmlNode node in NodeList) { sText += node.InnerXml; } sText += "</" + doc.DocumentElement.Name + ">"; if (String.IsNullOrEmpty(sText) == false) { string sCommand = @"if exists(select * from sys.tables where name='XMLwithOpenXML') drop table XMLwithOpenXML; CREATE TABLE XMLwithOpenXML (XMLData xml null); insert into XMLwithOpenXML (XMLData) values (@XMLData);"; using (var context = new HISEntities()) { var commandText = sCommand; var name = new SqlParameter("@XMLData", sText); context.Database.ExecuteSqlCommand(commandText, name); } string sInsertHITotfa = sqlText(); using (DbContext ctx = new DbContext("Server=127.0.0.1,1933; Integrated Security=true; Database=his" + r.USHospID.ToString() + "; user id=sa;password=1qaz@WSX;")) { ctx.Database.CommandTimeout = 600; ctx.Database.ExecuteSqlCommand(sInsertHITotfa); } //string sConn = ConfigurationManager.ConnectionStrings["Test"].ToString(); //SqlConnection conn = new SqlConnection(sConn); //DatabaseProviderFactory factory_XML = new DatabaseProviderFactory(); //Database db_InsertXML = factory_XML.Create("conn3HFC"); //DbCommand cmd_InsertXML = db_InsertXML.GetSqlStringCommand(sInsertXML); //cmd_InsertXML.Parameters.Clear(); //db_InsertXML.AddInParameter(cmd_InsertXML, "@XMLData", DbType.String, sText); //db_InsertXML.AddInParameter(cmd_InsertXML, "@LoadedDateTime", DbType.DateTime, DateTime.Now); //db_InsertXML.ExecuteNonQuery(cmd_InsertXML); } //HisEntities db_his = new HisEntities(myClass.GetSQLConnectionString(@"127.0.0.1,1933", "antifat", @"sa", @"I@ntif@t")); } string sqlText() { string sSqlCommandText = @"DECLARE @xmlData xml; select @xmlData=XMLData from [antifat].[dbo].[XMLwithOpenXML]; select newid() as id, Nd.value('(t1)[1]','nvarchar(10)') as t1, Nd.value('(t2)[1]','nvarchar(10)') as t2, Nd.value('(t3)[1]','nvarchar(10)') as t3, Nd.value('(t4)[1]','nvarchar(10)') as t4, Nd.value('(t5)[1]','nvarchar(10)') as t5, Nd.value('(t6)[1]','nvarchar(10)') as t6, Nd.value('(t7)[1]','nvarchar(10)') as t7, Nd.value('(t8)[1]','nvarchar(10)') as t8, Nd.value('(t9)[1]','nvarchar(10)') as t9, Nd.value('(t10)[1]','nvarchar(10)') as t10, Nd.value('(t11)[1]','nvarchar(10)') as t11, Nd.value('(t12)[1]','nvarchar(10)') as t12, Nd.value('(t13)[1]','nvarchar(10)') as t13, Nd.value('(t14)[1]','nvarchar(10)') as t14, Nd.value('(t15)[1]','nvarchar(10)') as t15, Nd.value('(t16)[1]','nvarchar(10)') as t16, Nd.value('(t17)[1]','nvarchar(10)') as t17, Nd.value('(t18)[1]','nvarchar(10)') as t18, Nd.value('(t19)[1]','nvarchar(10)') as t19, Nd.value('(t20)[1]','nvarchar(10)') as t20, Nd.value('(t21)[1]','nvarchar(10)') as t21, Nd.value('(t22)[1]','nvarchar(10)') as t22, Nd.value('(t23)[1]','nvarchar(10)') as t23, Nd.value('(t24)[1]','nvarchar(10)') as t24, Nd.value('(t25)[1]','nvarchar(10)') as t25, Nd.value('(t26)[1]','nvarchar(10)') as t26, Nd.value('(t27)[1]','nvarchar(10)') as t27, Nd.value('(t28)[1]','nvarchar(10)') as t28, Nd.value('(t29)[1]','nvarchar(10)') as t29, Nd.value('(t30)[1]','nvarchar(10)') as t30, Nd.value('(t31)[1]','nvarchar(10)') as t31, Nd.value('(t32)[1]','nvarchar(10)') as t32, Nd.value('(t33)[1]','nvarchar(10)') as t33, Nd.value('(t34)[1]','nvarchar(10)') as t34, Nd.value('(t35)[1]','nvarchar(10)') as t35, Nd.value('(t36)[1]','nvarchar(10)') as t36, Nd.value('(t37)[1]','nvarchar(10)') as t37, Nd.value('(t38)[1]','nvarchar(10)') as t38, Nd.value('(t39)[1]','nvarchar(10)') as t39, Nd.value('(t40)[1]','nvarchar(10)') as t40 into #totfa from @xmlData.nodes('/outpatient/tdata') AS A(Nd) -- 將 totfa 產生的 id 抛給變數 @totfa_id 並依此與 dtlfa 為PK declare @totfa_id nvarchar(128); declare @t3 nvarchar(10); select @totfa_id = id, @t3=t3 from #totfa; --drop table #dtlfa select newid() as id,@totfa_id as totfa_id, Nd.value('(./dhead/d1)[1]', 'nvarchar(10)') as d1, Nd.value('(./dhead/d2)[1]', 'nvarchar(10)') as d2, Nd.value('(./dbody/d3)[1]', 'nvarchar(10)') as d3, Nd.value('(./dbody/d4)[1]', 'nvarchar(10)') as d4, Nd.value('(./dbody/d5)[1]', 'nvarchar(10)') as d5, Nd.value('(./dbody/d6)[1]', 'nvarchar(10)') as d6, Nd.value('(./dbody/d7)[1]', 'nvarchar(10)') as d7, Nd.value('(./dbody/d8)[1]', 'nvarchar(10)') as d8, Nd.value('(./dbody/d9)[1]', 'nvarchar(10)') as d9, Nd.value('(./dbody/d10)[1]', 'nvarchar(10)') as d10, Nd.value('(./dbody/d11)[1]', 'nvarchar(10)') as d11, Nd.value('(./dbody/d12)[1]', 'nvarchar(10)') as d12, Nd.value('(./dbody/d13)[1]', 'nvarchar(10)') as d13, Nd.value('(./dbody/d14)[1]', 'nvarchar(10)') as d14, Nd.value('(./dbody/d15)[1]', 'nvarchar(10)') as d15, Nd.value('(./dbody/d16)[1]', 'nvarchar(10)') as d16, Nd.value('(./dbody/d17)[1]', 'nvarchar(10)') as d17, Nd.value('(./dbody/d18)[1]', 'nvarchar(10)') as d18, Nd.value('(./dbody/d19)[1]', 'nvarchar(10)') as d19, Nd.value('(./dbody/d20)[1]', 'nvarchar(10)') as d20, Nd.value('(./dbody/d21)[1]', 'nvarchar(10)') as d21, Nd.value('(./dbody/d22)[1]', 'nvarchar(10)') as d22, Nd.value('(./dbody/d23)[1]', 'nvarchar(10)') as d23, Nd.value('(./dbody/d24)[1]', 'nvarchar(10)') as d24, Nd.value('(./dbody/d25)[1]', 'nvarchar(10)') as d25, Nd.value('(./dbody/d26)[1]', 'nvarchar(10)') as d26, Nd.value('(./dbody/d27)[1]', 'nvarchar(10)') as d27, Nd.value('(./dbody/d28)[1]', 'nvarchar(10)') as d28, Nd.value('(./dbody/d29)[1]', 'nvarchar(10)') as d29, Nd.value('(./dbody/d30)[1]', 'nvarchar(10)') as d30, Nd.value('(./dbody/d31)[1]', 'nvarchar(10)') as d31, Nd.value('(./dbody/d32)[1]', 'nvarchar(10)') as d32, Nd.value('(./dbody/d33)[1]', 'nvarchar(10)') as d33, Nd.value('(./dbody/d34)[1]', 'nvarchar(10)') as d34, Nd.value('(./dbody/d35)[1]', 'nvarchar(10)') as d35, Nd.value('(./dbody/d36)[1]', 'nvarchar(10)') as d36, Nd.value('(./dbody/d37)[1]', 'nvarchar(10)') as d37, Nd.value('(./dbody/d38)[1]', 'nvarchar(10)') as d38, Nd.value('(./dbody/d39)[1]', 'nvarchar(10)') as d39, Nd.value('(./dbody/d40)[1]', 'nvarchar(10)') as d40, Nd.value('(./dbody/d41)[1]', 'nvarchar(10)') as d41, Nd.value('(./dbody/d42)[1]', 'nvarchar(10)') as d42, Nd.value('(./dbody/d43)[1]', 'nvarchar(10)') as d43, Nd.value('(./dbody/d44)[1]', 'nvarchar(10)') as d44, Nd.value('(./dbody/d45)[1]', 'nvarchar(10)') as d45, Nd.value('(./dbody/d46)[1]', 'nvarchar(11)') as d46, Nd.value('(./dbody/d47)[1]', 'nvarchar(11)') as d47, Nd.value('(./dbody/d48)[1]', 'nvarchar(10)') as d48, Nd.value('(./dbody/d49)[1]', 'nvarchar(20)') as d49 into #dtlfa from [antifat].[dbo].[XMLwithOpenXML] CROSS APPLY @xmlData.nodes('/outpatient/ddata') AS A(Nd) -- ORDFA select @totfa_id as totfa_id, Nd.value('(dhead/d1)[1]','nvarchar(10)') AS d1, Nd.value('(dhead/d2)[1]','nvarchar(10)') AS d2, Nd.value('(dbody/d3)[1]','nvarchar(10)') AS d3, Edg.value('(p1)[1]','nvarchar(10)') AS p1, Edg.value('(p2)[1]','nvarchar(10)') AS p2, Edg.value('(p3)[1]','nvarchar(10)') AS p3, Edg.value('(p4)[1]','nvarchar(12)') AS p4, Edg.value('(p5)[1]','nvarchar(10)') AS p5, Edg.value('(p6)[1]','nvarchar(10)') AS p6, Edg.value('(p7)[1]','nvarchar(10)') AS p7, Edg.value('(p8)[1]','nvarchar(10)') AS p8, Edg.value('(p9)[1]','nvarchar(10)') AS p9, Edg.value('(p10)[1]','nvarchar(10)') AS p10, Edg.value('(p11)[1]','nvarchar(10)') AS p11, Edg.value('(p12)[1]','nvarchar(10)') AS p12, Edg.value('(p13)[1]','nvarchar(10)') AS p13, Edg.value('(p14)[1]','nvarchar(11)') AS p14, Edg.value('(p15)[1]','nvarchar(11)') AS p15, Edg.value('(p16)[1]','nvarchar(10)') AS p16, Edg.value('(p17)[1]','nvarchar(10)') AS p17, Edg.value('(p18)[1]','nvarchar(10)') AS p18, Edg.value('(p19)[1]','nvarchar(10)') AS p19, Edg.value('(p20)[1]','nvarchar(10)') AS p20 into #ordfa from @xmlData.nodes('/outpatient/ddata') AS A(Nd) CROSS APPLY A.Nd.nodes('dbody/pdata') AS B(Edg) -- 先把資料做清除動作,由下往上刪 -- 刪除 ordfa delete ordfa where dtlfa_id in (select d.id from dtlfa d join (select id from totfa where t3=@t3) t on d.totfa_id=t.id) -- 刪除 dtlfa delete dtlfa where totfa_id in (select id from totfa where t3=@t3) -- 刪除 totfa delete totfa where t3=@t3 -- 把資料寫入到 totfa insert into totfa select * from #totfa insert into dtlfa select * from #dtlfa -- 整理 #ordfa 資料並寫入到 ordfa insert into ordfa select newid() as id,d.id as dtlfa_id,convert(int,o.p13) as intSeq, o.p1,o.p2,o.p3,o.p4,o.p5,o.p6,o.p7,o.p8,o.p9,o.p10, o.p11,o.p12,o.p13,o.p14,o.p15,o.p16,o.p17,o.p18,o.p19,o.p20 from #ordfa o left join #dtlfa d on o.totfa_id=d.totfa_id and o.d1=d.d1 and o.d2=d.d2 and o.d3=d.d3" ; return(sSqlCommandText); } }