通过 VBA 连接执行长查询

Long Query Execution through VBA concatenation

我正在设置一个自动 excel vba 工作簿,它通过查询提取数据,同时从 Excel 单元格中获取参数。

到目前为止,它已经在简单的查询和 SP 上运行,但我正在尝试传递一个很长的查询,而且 Excel 函数似乎正在将字符串截断为 1043 个字符。

*查询有 1426 个字符。

我对这个问题采取了 3 种不同的方法。

  1. 正在执行 SQL 存储过程(来自 vba)而不是查询,问题是其中一个输入参数是一个 id 列表,它在长度,并且作为 SP 参数传递非常长,因此即使将 Varchar(Max) 分配为类型时它也不起作用。

  2. 正在将查询执行到一个新的 table 中,并将完整的 table 提取到 excel 中。虽然这确实有效,但必须手动更新 id 列表,因此它的功能不够。

  3. 将 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.

希望对您有所帮助。