Я работаю над базой данных SQL Azure.
Я пытаюсь преобразовать тип данных поля, содержащий даты в формате дд / мм / гггг, из поля даты (100) в поле даты.Мне не повезло!
Любая помощь будет принята с благодарностью.Я не эксперт по SQL, но использую управление сервером Microsoft SQL.
Имя моего столбца - Eventdate, а имя таблицы - клиенты.
Я пытался, но уверен, что что-то делаюнеправильно
Select Eventdate
Where Customers
SELECT convert(varchar(100),Eventdate,101)
РЕДАКТИРОВАТЬ:
Хотя ответ на изменение столбца varchar на datetime сработал, я столкнулся с другой проблемой.Я более подробно расскажу о том, что делает база данных.
У меня есть таблица Excel, в которой есть следующий код VBA для подключения к базе данных SQL и вставки данных в SQL.
Для этого сначала нужно отправить его в таблицу SQL с именем «MergeCustomers», проверяя наличие дубликатов полей KeyID (JobCode), а затем поместить в таблицу «Customer».
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim conn As New ADODB.Connection
Dim iRowNo As Integer
Dim sCustomerId, sFirstName, sLastName As String
With Sheets("sql")
'Open a connection to SQL Server
conn.Open "Provider=SQLOLEDB;Data Source=tcp:SERVERADDRESS,1433;Initial Catalog=Sales;Persist Security Info=False;User ID=USER;Password=PASSWORD;MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;"
'Skip the header row
iRowNo = 2
'Loop until empty cell in CustomerId
Do Until .Cells(iRowNo, 1) = ""
sJobcode = .Cells(iRowNo, 1)
sEventstatus = .Cells(iRowNo, 2)
sVenue = .Cells(iRowNo, 3)
sGuestno = .Cells(iRowNo, 4)
sEventtype = .Cells(iRowNo, 5)
sClient = .Cells(iRowNo, 6)
sEventdate = .Cells(iRowNo, 7)
sCommission = .Cells(iRowNo, 8)
sEventvalue = .Cells(iRowNo, 9)
sEventmargin = .Cells(iRowNo, 10)
sAccountman = .Cells(iRowNo, 11)
'Generate and execute sql statement to import the excel rows to SQL Server table
conn.Execute "insert into dbo.CustomersStage (Jobcode, Eventstatus, Venue, Guestno, Eventtype, Client, Eventdate, Commission, Eventvalue, Eventmargin, Accountman) values ('" & sJobcode & "', '" & sEventstatus & "', '" & sVenue & "', '" & sGuestno & "', '" & sEventtype & "', '" & sClient & "', '" & sEventdate & "', '" & sCommission & "', '" & sEventvalue & "', '" & sEventmargin & "', '" & sAccountman & "')"
iRowNo = iRowNo + 1
Loop
conn.Execute "EXEC dbo.MergeCustomers"
MsgBox "File saved and data successfully uploaded to the cloud"
conn.Close
Set conn = Nothing
End With
End Sub
После изменения столбцов «Eventdate» в таблицах sql MergeCustomers и Customers я получаю следующую ошибку при запуске кода VBA в Excel:
«преобразование данных varcharтип для типа данных datetime привел к значению вне допустимого диапазона "
Я думаю, что мне нужно изменить вывод файла Excel, чтобы соответствовать изменению в типе данных sql?
Я скопировал процедуру слияния, которую я выполняю на SQL ниже.
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[MergeCustomers] AS
SET NOCOUNT ON
MERGE dbo.Customers AS Trgt
USING dbo.CustomersStage Src
ON Trgt.Jobcode = Src.Jobcode
WHEN NOT MATCHED BY TARGET THEN
INSERT (Jobcode, Eventstatus, Venue, Guestno, Eventtype, Client, Eventdate, Commission, Eventvalue, Eventmargin, Accountman)
VALUES (Src.Jobcode, Src.Eventstatus, Src.Venue, Src.Guestno, Src.Eventtype, Src.Client, Src.Eventdate, Src.Commission, Src.Eventvalue, Src.Eventvalue, Src.Accountman)
WHEN MATCHED AND
(
ISNULL(Trgt.Eventstatus, '') <> ISNULL(Src.Eventstatus, '')
OR
ISNULL(Trgt.Venue, '') <> ISNULL(Src.Venue, '')
OR
ISNULL(Trgt.Guestno, '') <> ISNULL(Src.Guestno, '')
OR
ISNULL(Trgt.Eventtype, '') <> ISNULL(Src.Eventtype, '')
OR
ISNULL(Trgt.Client, '') <> ISNULL(Src.Client, '')
OR
ISNULL(Trgt.Eventdate, '') <> ISNULL(Src.Eventdate, '')
OR
ISNULL(Trgt.Commission, '') <> ISNULL(Src.Commission, '')
OR
ISNULL(Trgt.Eventvalue, '') <> ISNULL(Src.Eventvalue, '')
OR
ISNULL(Trgt.Eventmargin, '') <> ISNULL(Src.Eventmargin, '')
OR
ISNULL(Trgt.Accountman, '') <> ISNULL(Src.Accountman, '')
)
THEN
UPDATE SET Eventstatus = Src.Eventstatus, Venue = Src.Venue, Guestno = Src.Guestno, Eventtype = Src.Eventtype, Client = Src.Client, Eventdate = Src.Eventdate, Commission = Src.Commission, Eventvalue = Src.Eventvalue, Eventmargin = Src.Eventmargin, Accountman = Src.Accountman
;
DELETE FROM dbo.CustomersStage