SQL Server查询仅返回前1行

时间:2016-04-05 00:51:15

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

我无法解决这个问题,我在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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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