操作数类型冲突:int与日期不兼容

时间:2016-03-22 14:05:06

标签: sql-server

我有一个select语句,它将我的日期列转换为varchar,然后转换为在SSMS中工作的int,并给出了我想看到的结果。在SSIS中,它开始抛出错误,因此我决定在select语句中使用表变量并将数据发送到那里,然后使用该数据将其插入到主表中,使用SSIS数据流。

我的select语句给出错误:

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

我的Select语句是:

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

2 个答案:

答案 0 :(得分:4)

您的某些字段(例如 OrderlineCreateDate )不属于dateint类型。但CONVERT(VARCHAR(8), field, 112)期望字段date,因此存在数据类型冲突。

如果这些字段确实属于int类型,可能会想知道为什么要将这些字段转换为varchar,然后再将其转换为int

然后将它们插入到一个表格中,期望它们为date

答案 1 :(得分:1)

您的问题的实质内容已得到解决,但我还要补充一点,我遇到了这个错误,因为我的开头是一个只包含NULL的日期列。

当我试图稍后插入该列的数据时,我猜想期望实际日期值的列将NULL解释为int(或以其他方式混淆)。我不确定NULL是否会每次都会导致此错误,但如果您发现此错误,则需要检查该错误。