以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  sqlbulkcopy的问题  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=161198)

--  作者:happyft
--  发布时间:2021/3/9 16:36:00
--  sqlbulkcopy的问题
Dim conn As new System.Data.SqlClient.SqlConnection("server=" & db_IP & "," & sql_Port & ";uid=" & db_User & ";pwd=" & db_Pwd & ";database=" & db_Name)  \'动态替换server=jhderp.gnway.cc,10433;uid=AAA;pwd=jhd-5688;database=DDD
conn.Open() \'打开链接
tran = conn.BeginTransaction()
Dim copy As new System.Data.SqlClient.SqlBulkCopy(conn, System.Data.SqlClient.SqlBulkCopyOptions.Default, tran)  \'-->SqlBulkCopy只能用于新增数据行到数据库中,不能用于修改
For Each dc As DataCol In DataTables(e.form.name & "_Table2").datacols
    Dim mapping1 As new System.Data.SqlClient.SqlBulkCopyColumnMapping(dc.name, dc.name)
    Copy.ColumnMappings.Add(mapping1)
Next
copy.Destinati \'指定服务器上目标表的名称
copy.BatchSize = 1000
copy.WriteToServer(DataTables(e.form.name & "_Table2").basetable)   \'你的datatable名字,执行把DataTable中的数据写入DB
tran.Commit()       \'提交事务
DataTables(e.form.name & "_Table2").AcceptChanges()

当要将订单表1(只有三列) 的数据复制到订单表2中(有五列),而具列名称还可能不一样,可以实现吗?此时上面的代码应该如何修改?
谢谢!

--  作者:有点蓝
--  发布时间:2021/3/9 16:55:00
--  
只能一列对一列



    Dim mapping1 As new System.Data.SqlClient.SqlBulkCopyColumnMapping(源表列名, 目的表列名)
    Copy.ColumnMappings.Add(mapping1)

--  作者:HappyFt
--  发布时间:2021/3/9 17:35:00
--  
For Each dc As DataCol In DataTables(e.form.name & "_Table2").datacols
    Dim mapping1 As new System.Data.SqlClient.SqlBulkCopyColumnMapping(dc.name, dc.name)
    Copy.ColumnMappings.Add(mapping1)
Next
上面这种写法是表加载到ft的前台,如果直接用sql数据库中的表A copy 到另一个表B,写法要如何改变?

谢谢!

--  作者:有点蓝
--  发布时间:2021/3/9 17:53:00
--  
这种用法原表必须要先加载。如果没有加载直接使用sql不就行了,搞那么复杂干啥

https://www.baidu.com/baidu?word=insert+into+select

INSERT INTO 表a (name, country) SELECT app_name, country FROM 表B;

--  作者:HappyFt
--  发布时间:2021/3/9 18:05:00
--  
主要是用于新项目迁移数据用,数据量都是几十万以上的,用insert into效率比较低
--  作者:有点蓝
--  发布时间:2021/3/9 20:15:00
--  
认真看看4楼,insert+into+select的用法不可能比SqlBulkCopy效率低,当然这个要2个表都是同一个数据库

如果不同数据库,表A肯定要先加载出来才能使用SqlBulkCopy