【问题标题】:SQL Server query only returns first 1 rowSQL Server 查询仅返回前 1 行
【发布时间】:2016-04-05 00:51:15
【问题描述】:

我想不通,我在 SQL Server 管理中运行该语句并返回所有记录集,但是当我通过代码运行完全相同的语句时,它总是只返回第一个数据集。

我在 SQL Fiddle 中尝试了同样简单的 SELECT 语句,它按应有的方式工作,这可能是什么原因?

这是SQL Fiddle 来展示我正在尝试做的事情

SELECT column1, column2
FROM Table1
WHERE column2 = '1234';

数据的外观,

|column1(nvarchar(50)) | column2(nvarchar(50))|
-----------------------------------------------
|Section1              | 1234                 |
|Section2              | 1234                 |
|Section3              | 1234                 |
|Section3              | 1234                 |
-----------------------------------------------

运行代码后的结果。

|column1(nvarchar(50)) | column2(nvarchar(50))|
-----------------------------------------------
|Section1              | 1234                 |    
-----------------------------------------------

我正在使用的代码。

    Dim conn As ADODB.Connection
    Dim rs As ADODB.Recordset
    Dim sConnString As String
    sConnString = "PROVIDER=SQLOLEDB;" & _
                                   "Data Source=190.190.10.XXX,1433;" & _
                                   "Initial Catalog=my_DB;" & _
                                   "User Id=sa;" & _
                                   "Password=my_Password;"

               Set conn = New ADODB.Connection
               Set rs = New ADODB.Recordset              
               conn.Open sConnString
         strSQL = "SELECT Section_Data, Words_Data FROM Words_TBL WHERE Words_Data = '1234'"                       
                            rs.Open strSQL
                            If rs.EOF = False Then
                                x = rs.GetRows
                            Else

                            For i = LBound(x) To UBound(x)
                                  Debug.Print x(i, 0)
                            Next i

【问题讨论】:

  • 你能告诉我们你的代码吗?
  • 您要求我们告诉您为什么您的代码无法正常工作,但未包含您的代码。您认为我们可以提供哪些帮助?
  • 我的错,我应该把它放进去。现在可以了。
  • 您是否使用 ADO / 记录集来获取此数据?
  • @iliketocode,更新代码

标签: sql sql-server vba sql-server-2014


【解决方案1】:

使用 GetRows 方法将记录从 Recordset 复制到 二维数组。 第一个下标标识字段和 第二个标识记录号。数组变量是 GetRows 方法时自动将尺寸标注为正确的大小 返回数据。

For i = LBound(x) To UBound(x)
    Debug.Print x(i, 0)
Next i

应该是

For i = LBound(x, 2) To UBound(x, 2)
    Debug.Print x(0, i)
Next i

【讨论】:

  • 我不敢相信,我不能把我的头拧紧,我使用的是工作表数组的循环,而不是 Get-rows 数组。我有数百个使用 GetRows 数组的语句,我非常专注于 SQL 语句,以至于忘记了循环。谢谢,这解决了它。代表你蒂姆。
【解决方案2】:

我会使用 CopyFromRecordset 方法将所有数据复制到一个范围。更快,但您确实需要先遍历所有字段名称才能创建标题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-17
    • 2021-02-02
    • 2013-04-05
    • 1970-01-01
    • 2018-06-15
    • 2013-08-18
    相关资源
    最近更新 更多