2016-03-22 9 views
0

У меня был оператор select, который преобразовал мои столбцы даты в varchar, а затем в int, который работал в SSMS, и дал мой результат, который я хотел увидеть. В SSIS он начал бросать ошибки, поэтому решил использовать переменные таблицы в своем операторе select и отправить туда данные, а затем использовать эти данные, чтобы вставить их в мою основную таблицу, используя поток данных SSIS.Операнд типа clash: int несовместим с датой

Мой оператор выбора дает ошибку:

Msg 206, Level 16, State 2, Line 71 
Operand type clash: int is incompatible with date 

Мой Выберите утверждение:

DECLARE @Order TABLE (
    [OrderCode] [INT] NOT NULL, 
    [PersonCode] [BIGINT] NOT NULL, 
    [OrderDateTimeBase] [INT] NULL, 
    [OrderlineCreateDate] [INT] NOT NULL, 
    [OrderlineDateTimeBase] [INT] NULL, 
    [OrderlineDateBase] [DATE] NULL, 
    [BackOrderPromiseDate] [INT] NULL, 
    [CancelDate] [INT] NULL, 
    [DespatchedDate] [INT] NULL, 
    [ReturnDate] [INT] NULL, 
    [ExchangeDate] [INT] NULL 
); 

INSERT INTO @Order 
SELECT 
     CAST(LEFT(o.[personCode] 
    , CHARINDEX('~', o.[personCode]) - 1) AS BIGINT) AS 'PersonCode' 
    , CONVERT(INT, CONVERT(VARCHAR(8), o.[OrderDatetimeBase], 112)) AS 'OrderDateTimeBase' 
    , CONVERT(INT, CONVERT(VARCHAR(8), ol.[OrderlineCreateDate], 112)) AS 'OrderlineCreateDate' 
    , CONVERT(INT, CONVERT(VARCHAR(8), ol.[OrderlinedatetimeBase], 112)) AS 'OrderlinedatetimeBase' 
    , CONVERT(INT, CONVERT(VARCHAR(8), ol.[OrderlineDateBase], 112)) AS 'OrderlineDateBase' 
    , CONVERT(INT, CONVERT(VARCHAR(8), ol.[BackOrderPromiseDate], 112)) AS 'BackOrderPromiseDate' 
    , CONVERT(INT, CONVERT(VARCHAR(8), ol.[CancelDate], 112)) AS 'CancelDate' 
    , CONVERT(INT, CONVERT(VARCHAR(8), ol.[DespatchedDate], 112)) AS 'DespatchedDate' 
    , CONVERT(INT, CONVERT(VARCHAR(8), ol.[ReturnDate], 112)) AS 'ReturnDate' 
    , CONVERT(INT, CONVERT(VARCHAR(8), ol.[ExchangeDate], 112)) AS 'ExchangeDate' 
FROM dbo.A ol 
INNER JOIN dbo.B o ON o.orderID = ol.orderID; 

SELECT * FROM @Order 
+0

Является ли это SQL Server? Не могли бы вы пометить свой вопрос тем? – trincot

+0

это не sql? но хорошо, извините за это – Faiz

+0

@Faiz, SQL - это язык запросов, а не продукт. MS SQL Server является одним из многих продуктов, поддерживающих язык SQL. – jarlh

ответ

3

Некоторые из ваших полей (например, OrderlineCreateDate) не из date но int типа. Но CONVERT(VARCHAR(8), field, 112) ожидает Поле должно быть date, поэтому существует конфликт типа данных.

Если эти поля действительно предназначены для типа int, то неудивительно, почему вы бы их конвертировали в varchar, а затем обратно в int.

И затем вы вставляете их в таблицу, которая ожидает, что они будут date.

Смежные вопросы