通过 VBA 连接执行长查询
Long Query Execution through VBA concatenation
我正在设置一个自动 excel vba 工作簿,它通过查询提取数据,同时从 Excel 单元格中获取参数。
到目前为止,它已经在简单的查询和 SP 上运行,但我正在尝试传递一个很长的查询,而且 Excel 函数似乎正在将字符串截断为 1043 个字符。
*查询有 1426 个字符。
我对这个问题采取了 3 种不同的方法。
正在执行 SQL 存储过程(来自 vba)而不是查询,问题是其中一个输入参数是一个 id 列表,它在长度,并且作为 SP 参数传递非常长,因此即使将 Varchar(Max)
分配为类型时它也不起作用。
正在将查询执行到一个新的 table 中,并将完整的 table 提取到 excel 中。虽然这确实有效,但必须手动更新 id 列表,因此它的功能不够。
将 SQL 字符串作为字符串的串联直接传递给 Excel 函数,但它会抛出我认为与字符串截断相关的错误。
我的代码如下:
Private Sub CommandButton1_Click()
Dim organization As Integer 'Business Unit
Dim material As String 'List of IDs
organization = Sheets("Hoja1").Range("B3").Value 'Extract B3
material = Sheets("Hoja1").Range("B4").Value 'Extract B4
'Parsing the query into statements to be concatenated
Connection
With ActiveWorkbook.Connections("NZSQL Test").ODBCConnection
sql1 = 'statement1
sql2 = 'statement2
sql3 = 'statement3
sql4 = 'statement4
sql5 = 'statement5
sql6 = 'statement6
Query = sql1 & sql2 & sql3 & sql4 & sql5 & sql6
Sheets("Hoja1").Range("B2") = Query 'This is to beused as revision directly
in ODBC platform
.CommandText = Query
ActiveWorkbook.Connections("NZSQL Test").Refresh
End With
End Sub
我在 SQL 中粘贴 B2 查询时得到的结果集:
/*
ERROR [42000] ERROR: '...' 'Returns a part of the SQL string */
此处的字符串被截断为 1043 个字符。
但是,我使用 pyodbc 尝试了 Python 中的相同方法,并且效果很好。
您是否尝试过将您的 Query 变量显式声明为字符串,并在子中使用其他声明?
Dim Query As String
根据here,一个字符串可以:
- A variable-length string can contain up to approximately 2 billion (2^31) characters.
- A fixed-length string can contain 1 to approximately 64 K (2^16) characters.
希望对您有所帮助。
我正在设置一个自动 excel vba 工作簿,它通过查询提取数据,同时从 Excel 单元格中获取参数。
到目前为止,它已经在简单的查询和 SP 上运行,但我正在尝试传递一个很长的查询,而且 Excel 函数似乎正在将字符串截断为 1043 个字符。
*查询有 1426 个字符。
我对这个问题采取了 3 种不同的方法。
正在执行 SQL 存储过程(来自 vba)而不是查询,问题是其中一个输入参数是一个 id 列表,它在长度,并且作为 SP 参数传递非常长,因此即使将
Varchar(Max)
分配为类型时它也不起作用。正在将查询执行到一个新的 table 中,并将完整的 table 提取到 excel 中。虽然这确实有效,但必须手动更新 id 列表,因此它的功能不够。
将 SQL 字符串作为字符串的串联直接传递给 Excel 函数,但它会抛出我认为与字符串截断相关的错误。
我的代码如下:
Private Sub CommandButton1_Click()
Dim organization As Integer 'Business Unit
Dim material As String 'List of IDs
organization = Sheets("Hoja1").Range("B3").Value 'Extract B3
material = Sheets("Hoja1").Range("B4").Value 'Extract B4
'Parsing the query into statements to be concatenated
Connection
With ActiveWorkbook.Connections("NZSQL Test").ODBCConnection
sql1 = 'statement1
sql2 = 'statement2
sql3 = 'statement3
sql4 = 'statement4
sql5 = 'statement5
sql6 = 'statement6
Query = sql1 & sql2 & sql3 & sql4 & sql5 & sql6
Sheets("Hoja1").Range("B2") = Query 'This is to beused as revision directly
in ODBC platform
.CommandText = Query
ActiveWorkbook.Connections("NZSQL Test").Refresh
End With
End Sub
我在 SQL 中粘贴 B2 查询时得到的结果集:
/*
ERROR [42000] ERROR: '...' 'Returns a part of the SQL string */
此处的字符串被截断为 1043 个字符。 但是,我使用 pyodbc 尝试了 Python 中的相同方法,并且效果很好。
您是否尝试过将您的 Query 变量显式声明为字符串,并在子中使用其他声明?
Dim Query As String
根据here,一个字符串可以:
- A variable-length string can contain up to approximately 2 billion (2^31) characters.
- A fixed-length string can contain 1 to approximately 64 K (2^16) characters.
希望对您有所帮助。