通过VBA串联执行长查询



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

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

*查询有1426个字符。

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

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

  2. 将查询执行到一个新表中,并将整个表提取到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变量显式声明为字符串,并在sub中使用其他声明?

Dim Query As String

根据这里,字符串可以:

  • 可变长度字符串最多可包含约20亿(2^31)个字符
  • 固定长度的字符串可以包含1到大约64 K(2^16)个字符

希望这能有所帮助。

相关内容

  • 没有找到相关文章

最新更新