通过VBA串联执行长查询

时间:2019-01-31 15:35:43

标签: sql sql-server excel vba nzsql

我正在建立一个自动的Excel vba工作簿,该工作簿通过Query提取数据,同时从Excel单元格获取参数。

到目前为止,它已经可以在简单的查询和SP上工作,但是我试图传递一个很长的查询,看来Excel Functions正在将字符串截断为1043个字符。

*查询有1426个字符。

针对此问题,我采取了3种不同的方法。

  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使用相同的方法,并且效果很好。

1 个答案:

答案 0 :(得分:1)

您是否尝试过将 Query 变量明确声明为字符串,并在子级中声明其他声明?

Dim Query As String

根据here,字符串可以:

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

希望有帮助。