- Всегда перечислять столбцы при написании оператора вставки.
Вот точный эквивалент вашей инструкции вставки, правильно написанный на основе опубликованного вами DDL:
INSERT INTO ServiceTicket
(serviceDate, vehicleId , customerId, inspectionId , serviceCost , inspectionCost, repairCost, GST , amountDue) VALUES
('90000' , '01-5-2019' , '50000' , '10000' , '70000' , 200.00 , 100.00 , 5.00 , 350.00)
Я использовал вкладки, чтобы каждое значение было идеально выровнено со столбцом, в который оно входит, что очень помогает, когда у вас длинный список столбцов.
Как вы можете ясно видеть, serviceDate
получает значение '90000'
- тогда как оно должно быть явно '01-5-2019'
- Всегда использовать формат ISO8601 для строкового представления значений даты / даты и времени.
Любой другой формат зависит от культуры, и хуже всего то, что он зависит от языка входа в систему по умолчанию - поэтому разные имена входа могут иметь разные результаты, если вы используете формат, зависящий от культуры. Стандарт ISO8601 предоставляет две альтернативы для форматов даты и времени: yyyy-mm-ddThh:mm:ss
или yyyymmddThhmmss
. Если вы вставляете только строковое значение только для даты в столбец / переменную типа данных DateTime
, обязательно используйте только второй (yyyymmdd
) формат - поскольку yyyy-mm-dd
по-прежнему зависит от культуры с DateTime
(но не с Date
или с DateTime2
- это еще одна причина, почему вы никогда не должны использовать DateTime
снова.
Таким образом, правильный способ написания оператора вставки будет таким:
INSERT INTO ServiceTicket
(serviceDate, vehicleId , customerId, inspectionId , serviceCost , inspectionCost, repairCost, GST , amountDue) VALUES
('2019-05-01', '90000' , '50000' , '10000' , '70000' , 200.00 , 100.00 , 5.00 , 350.00)
(То есть если предположить, что 01-5-2019 означает 1 мая. Если это означает 5 января, то должно быть 2019-01-05
).