Запрос SQL Таблица сервера с RowVersion - PullRequest
0 голосов
/ 28 февраля 2020

Я запрашиваю SQL Сервер из VBA, используя ADODB. Все мои таблицы имеют столбцы RowVersion (timestamp / varbinary). Поскольку VBA не поддерживает тип varbinary, я конвертирую RowVersion в строку из SQL серверной функции. Простой запрос будет выглядеть так:

sql = "SELECT NameValueListID, dbo.RowVersionToString(RowVersion) AS RowVersion FROM NameValueLists WHERE NameValueListID=1

Чтобы получить данные на лист, я сначала попробовал range.CopyFromRecordset. Это работало, пока я не включил вышеупомянутую функцию в вызов sql. Добавление функции RowVersionToString заставило набор записей вернуть то, что кажется случайным набором данных - меньше строк, чем исключено, и меньше столбца, чем я просил. Никогда не мог понять это. Затем я использовал rs.GetRows, который возвращал ожидаемые данные, и я мог успешно использовать range.value = rsData. Ниже приведен пример вызова, который работает.

Private Sub Test_Scratch()
    Dim rs As ADODB.Recordset
    Dim sqlCmd As New ADODB.Command
    Dim sqlConnection As ADODB.Connection
    Dim sql As String
    Dim rsData() As Variant

    Set sqlConnection = New ADODB.Connection
    sqlConnection.Open ModSQL.GetConnectionStringByStage(wsSetup.Range("suAppStage"))

    sql = "SELECT NameValueListID, dbo.RowVersionToString(RowVersion) AS RowVersion FROM NameValueLists WHERE NameValueListID=1"
    Set sqlCmd.ActiveConnection = sqlConnection
    sqlCmd.CommandText = sql
    Set rs = sqlCmd.Execute

    rs.MoveFirst

    rsData = rs.GetRows
End Sub

Затем я добавил второй столбец varbinary в запрос (это не RowVersion, но того же типа). Таким образом, sql будет выглядеть следующим образом:

sql = "SELECT NameValueListID, dbo.RowVersionToString(RowVersion) AS RowVersion,  dbo.RowVersionToString(LastItemRowVersion) AS LastItemRowVersion FROM NameValueLists WHERE NameValueListID=1

После вызова набор записей rs содержит все данные, но rsData имеет значение «Пусто» для первого столбца varbinary. Порядок не имеет значения. Только последний столбец varbinary имеет значение, другой всегда «пустой» в массиве rsData.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...