我想将大量数据从F#传输到SQL表。基本上,我的F#代码创建一个由三列(UserID, ProductID and price)和N行组成的矩阵。我想将其“复制/粘贴”到数据库中
我尝试了几种选择,但最后,从F#传输数据确实很慢(10000行大约需要1个小时)。

感谢上一个问题How to include a stored procedure in F#的答案,解决此问题的一种有趣方法是使用SqlBulkCopy

SqlBulkCopyWritetoServer方法需要一种数据库类型,但是我没有找到任何现有代码或将矩阵转换为数据库的简单方法。
您有什么建议或想法吗?

最佳答案

这应该使您入门(并参考documentation以获得有关SqlBulkCopy的更多信息):

//you must reference System.Data and System.Xml
open System.Data
open System.Data.SqlClient

let bulkLoadUserPurchases (conn:SqlConnection) (userPurchases: list<int * int * float>) =
    use sbc = new SqlBulkCopy(conn, SqlBulkCopyOptions.TableLock, null, BatchSize=500, BulkCopyTimeout=1200, DestinationTableName="YOUR_TABLE_NAME_HERE")
    sbc.WriteToServer(
        let dt = new DataTable()
        ["UserID", typeof<int>
         "ProductID", typeof<int>
         "Price", typeof<float>]
        |> List.iter (dt.Columns.Add>>ignore)

        for userPurchase in userPurchases do
            let userId, productId, price = userPurchase
            let dr = dt.NewRow()
            dr.["UserID"] <- userId
            dr.["ProductID"] <- productId
            dr.["Price"] <- price
            dt.Rows.Add(dr)

        dt)

关于sql - 将SqlBulkCopy与F#结合使用以在SQL中导出矩阵,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8941154/

10-12 15:36