非常感谢jacouh(VBA Copy & Paste 3000 rows)对我最初问题的回答。在论坛的帮助下,我现在有以下代码,它从Excel文件中插入2999行。每行INSERT (X, Y, Z, ...) VALUES (X1, Y1, Z1,...) into DBNAME.TABLE
。虽然它有效但却很慢。据我了解,我可以通过增加缓冲区的大小来提高插入速度,如http://developer.teradata.com/doc/connectivity/tdnetdp/13.11/webhelp/Teradata.Client.Provider~Teradata.Client.Provider.TdConnectionStringBuilder~ResponseBufferSize.html中所述。我试图加入它并失败了。有人可能会建议可能的集成来增加响应缓冲区大小。非常感谢。我之前曾探索过不同的论坛,这绝对是最好的论坛。当然。任何其他想法,比我目前使用的想法更好(在大约15个不同的表中插入约3000行),请告诉我!)
Sub Insert_to_TD()
Dim cn As ADODB.Connection
Set cn = New ADODB.Connection
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset
Dim cmdsqldata As ADODB.Command
Set cmdsqldata = New ADODB.Command
Dim i, strSQL
cn.Open "DSN=NNNNNN; Username=XXXXX; Password=YYYYYYY;"
Set cmdsqldata.ActiveConnection = cn
cmdsqldata.CommandType = adCmdText
cmdsqldata.CommandTimeout = 0
For i = 1 To 2999
strSQL = ActiveSheet.Cells(i, 1).Value
cmdsqldata.CommandText = strSQL
Set rs = cmdsqldata.Execute()
Next
End Sub
答案 0 :(得分:2)
我建议您考虑在VB代码中使用带参数的预准备语句。然后你有几个选择:
我确信有很多关于如何使用完成我在ADO / VB代码中建议的方法或者如果你遇到困难时使用谷歌搜索的例子。
或者,您可以使用Excel工作表并将其另存为CSV,该CSV可用作其中一个Teradata实用程序(如BTEQ,FastLoad,MultiLoad或Teradata Parallel Transport)的源。
答案 1 :(得分:2)
Teradata可以并行插入数据行(比如在Teradata SQL Assistant中点击F9)。您可以提交长度最大为1 MB的查询,其中多个语句以分号分隔,例如:
"INSERT (X, Y, Z, ...) VALUES (X1, Y1, Z1,...) into DBNAME.TABLE;
INSERT (X, Y, Z, ...) VALUES (X1, Y1, Z1,...) into DBNAME.TABLE;
INSERT (X, Y, Z, ...) VALUES (X1, Y1, Z1,...) into DBNAME.TABLE;
INSERT (X, Y, Z, ...) VALUES (X1, Y1, Z1,...) into DBNAME.TABLE;"
将整个字符串一次放入可能有500行到strSQL中,然后你只需循环执行6个语句来处理所有3000个。这样可以使你的过程加速至少10倍。使用VBA的非单线程语言或一些技巧将允许您一次向Teradata发送多个这样的语言,这可能会额外增加10倍,具体取决于您的Teradata服务器的容量和连接数量允许的。
但是罗布与其他Teradata公用事业公司走在了正确的轨道上。这些存在是有原因的,并且VBA-teradata操纵是艰难而缓慢的。