Проблема:
Импорт данных о времени из SQL Server (2014, 2016) с помощью метода VBA CopyFromRecordset()
не распознается как время, но имеет тип Standard
.
Пример:
SQL-запрос, который используется в Excel VBA
SELECT TOP 100
[CreationDate], -- Works as expected Datetime; data type of this field is DATETIME
CAST(CreationDate AS DATETIME) AS CreationDate2, -- Works as expected Datetime
CAST(CreationDate AS TIME(0)) AS CreationTime -- In Excel the type is Standard and not Time as it should be.
FROM
[StackOverflow2013].[dbo].[Comments]
код VBA:
Sub TimeImport()
Dim Conn As New ADODB.Connection
Dim RS As New ADODB.Recordset
Dim SQL As String
Const ConnStr As String = "Provider=SQLOLEDB; Data Source=PC\\MSSQLSERVER2014; Initial Catalog = StackOverflow2013; Integrated Security=SSPI;"
'SQL see above
Conn.Open ConnStr
RS.Open SQL, Conn
ActiveSheet.Cells(1, 1).CopyFromRecordset RS
RS.Close
Conn.Close
Set RS = Nothing
Set Conn = Nothing
End Sub
После импорта, если я введу ячейку в столбце времени в Excel с помощью клавиши F2 и нажму клавишу ввода, он правильно изменит тип данных на время. Однако просто изменение формата ячейки во времени не работает.
Если я импортирую запись данных по записи и преобразую поле времени в дату, используя функцию CDate()
, то это сработает. Однако это не вариант для меня из-за плохой производительности построчной обработки.
Кто-нибудь сталкивался с этой проблемой раньше и каково было решение?
Спасибо за любую подсказку.