从VBA到SQL Server的数据传输不完整

cbwuti44  于 2022-11-21  发布在  SQL Server
关注(0)|答案(1)|浏览(219)

我在Azure中有一个SQL服务器,想通过VPN隧道使用VBA将数据从Excel传输到它。它工作正常,但801个条目中有时传输320个条目,有时传输324个条目,但总是在300到350之间的范围内。它们以正确的顺序传输,因为它们在Excel文件中。我没有收到任何错误。刚才在SQL表中看到,没有所有的条目在那里。我尝试了几次,我的同事以及相同的结果。我的代码是:

Sub Importer(ByVal tableName As String, ByVal importQuery As String, pass As String)

    Dim con As Object
    
    Set con = CreateObject("ADODB.Connection")
    
        con.Open _
                "Driver={ODBC Driver 17 for SQL Server};" & _
                "Server=tcp:myServer,1433;" & _
                "Database=myDB;" & _
                "Uid= admin;" & _
                "Pwd=" & pass & ";" & _
                "TrustServerCertificate=no;" & _
                "Connection Timeout=30;" & _
                "Encrypt=yes;"
        con.Execute importQuery
        con.Close
       
    Set con = Nothing
    
End Sub

importQuery在一个查询中包含801个INSERT INTO条目,如下所示:

INSERT INTO dbo.table(Variable1, Variable1, Variable1) Values(", 3)
INSERT INTO dbo.table(Variable1, Variable1, Variable1) Values(", 3)
INSERT INTO dbo.table(Variable1, Variable1, Variable1) Values(", 3)

...
我试着设置超时,但没有效果。有人知道是什么可能导致这个问题吗?

nom7f22z

nom7f22z1#

你的伪代码在语法上是不正确的,但我想这无关紧要。
目前您正在以非事务方式执行多个单例INSERT语句。当然,您的连接被中断了,或者在代码执行过程中发生了其他问题,导致只插入了部分数据。
要么用一个transaction来 Package 整个INSERT语句集,要么更简单地将它们转换成一个包含多个值的INSERT语句,这样做可以隐式地进行事务处理,而且可能更高效,如下所示:

INSERT INTO dbo.table(Column1, Column2, Column3)
VALUES
    (ValueA1, ValueA2, ValueA3),
    (ValueB1, ValueB2, ValueB3),
    (ValueC1, ValueC2, ValueC3),
    (ValueD1, ValueD2, ValueD3),
    (ValueE1, ValueE2, ValueE3);

至于你的应用程序遇到了什么错误/问题,不幸的是,如果没有更多的细节,比如一个特定的错误消息,是不可取的。但是至少我上面提到的修复程序可以确保所有的数据或者没有数据被一致地插入。

相关问题