检索所有包含分号的查询

Retrieve all of query containing semi-colons

我正在尝试通过 VBA 中的 ADODB 记录集从 SQL 中提取数据。当 SQL 查询包含分号时,我很难从它的每个部分获取结果。想知道是否有任何方法可以在不将我的查询拆分为单独的查询(以删除分号问题)并为每个查询使用单独的记录集的情况下执行此操作。

请参阅下面的简单示例。当我 运行 它时,F2=1, G2=Failed - 我想要 F2=1, G2=2.

' Sub to test using semi-colons in SQL queries
Sub getDataSimple0(server As String, database As String)

  ' Initialise variables
  Dim con As ADODB.Connection
  Dim rs As ADODB.Recordset

  Set con = New ADODB.Connection
  Set rs = New ADODB.Recordset

  ' Open Connection using Windows Authentication
  con.ConnectionString = "Provider=SQLOLEDB;Data Source=" & server & ";Initial Catalog=" & database & ";Trusted_connection=Yes;Integrated Security=SSPI;Persist Security Info=True;"
  con.Open

  ' Open recordset
  rs.Open "SELECT 1; SELECT 2", con

  ' Add data to worksheet
  Range("F2").CopyFromRecordset rs

  rs.NextRecordset
  If rs.State > adStateClosed Then
    Range("G2").CopyFromRecordset rs
  Else
    Range("G2").Value = "Failed"
  End If

  ' Close connection
  con.Close

End Sub

我会通过做下面的事情来解决这个问题。

' Sub to test using semi-colons in SQL queries
Sub getDataSimple0(server As String, database As String)

  ' Initialise variables
  Dim con As ADODB.Connection
  Dim rs As ADODB.Recordset
  Dim SQL_String As String
  Dim SQL_Array() As String
  Dim i As Integer

  Set con = New ADODB.Connection
  Set rs = New ADODB.Recordset

  ' Open Connection using Windows Authentication
  con.ConnectionString = "Provider=SQLOLEDB;Data Source=" & server & ";Initial Catalog=" & database & ";Trusted_connection=Yes;Integrated Security=SSPI;Persist Security Info=True;"
  con.Open

  'Multiple queries
  SQL_String = "SELECT 1; SELECT 2"

  'Split into array
  SQL_Array = Split(SQL_String, ";")

  'Add data to worksheet
  For i = LBound(SQL_Array) To UBound(SQL_Array)

     rs.Open SQL_Array(i), con
     Range("F2").Offset(0, i).CopyFromRecordset rs

  Next i


  ' Close connection
  con.Close

End Sub

在这里,我接受了多个查询并将它们拆分成一个循环遍历的数组。假设您想要 F 列及以后的列中的输出。

我相信你需要将 rs 设置为 NextRecordset 的结果,所以代码如下所示:

' Sub to test using semi-colons in SQL queries
Sub getDataSimple0(server As String, database As String)

  ' Initialise variables
  Dim con As ADODB.Connection
  Dim rs As ADODB.Recordset

  Set con = New ADODB.Connection
  Set rs = New ADODB.Recordset

  ' Open Connection using Windows Authentication
  con.ConnectionString = "Provider=SQLOLEDB;Data Source=" & server & ";Initial Catalog=" & database & ";Trusted_connection=Yes;Integrated Security=SSPI;Persist Security Info=True;"
  con.Open

  ' Open recordset
  rs.Open "SELECT 1; SELECT 2", con

  ' Add data to worksheet
  Range("F2").CopyFromRecordset rs

  Set rs = rs.NextRecordset
  If rs.State > adStateClosed Then
    Range("G2").CopyFromRecordset rs
  Else
    Range("G2").Value = "Failed"
  End If

  ' Close connection
  con.Close

End Sub