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

Sql server 操作数类型冲突:int与日期不兼容,sql-server,Sql Server,我有一个select语句,它将我的日期列转换为varchar,然后转换为int,这在SSMS中起作用,并给出了我想要看到的结果。在SSIS中,它开始抛出错误,因此我决定在select语句中使用表变量并将数据发送到那里,然后使用该数据使用SSIS数据流将其插入主表中 我的select语句出现错误: Msg 206, Level 16, State 2, Line 71 Operand type clash: int is incompatible with date 我的选择声明是: DECLA

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

我的select语句出现错误:

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
某些字段(如OrderlineCreateDate)不是
date
类型,而是
int
类型。但是
CONVERT(VARCHAR(8),field,112)
希望字段是
日期,因此存在数据类型冲突

如果这些字段的类型真的是
int
,人们可能会想,为什么要将它们转换为
varchar
,然后再转换回
int

然后将它们插入一个表中,该表希望它们是
日期

某些字段(如OrderlineCreateDate)不是
日期
类型,而是
int
类型。但是
CONVERT(VARCHAR(8),field,112)
希望字段是
日期,因此存在数据类型冲突

如果这些字段的类型真的是
int
,人们可能会想,为什么要将它们转换为
varchar
,然后再转换回
int


然后将它们插入一个表,该表希望它们是
日期

您的问题的实质已经解决,但我还要补充一点,我遇到了这个错误,因为我从一个只包含NULL的日期列开始


当我稍后尝试插入该列的数据时,我猜需要实际日期值的列会将NULL解释为int(否则会混淆)。我不确定空值每次都会导致此错误,但如果您看到此错误,则需要进行检查。

您问题的实质已经解决,但我还要补充一点,我遇到此错误是因为我从仅包含空值的日期列开始


当我稍后尝试插入该列的数据时,我猜需要实际日期值的列会将NULL解释为int(否则会混淆)。我不确定空值是否每次都会导致此错误,但如果您看到此错误,则需要进行检查。

这是SQL Server吗?你能用它来标记你的问题吗?它不是sql吗?但是好吧,对不起that@Faiz,SQL是一种查询语言,而不是产品。MS SQL Server是许多支持SQL语言的产品之一。您正在将值转换为
INT
,同时尝试
将其插入
日期
列(
OrderlineDateBase
)。啊,愚蠢的错误,我认为我的代码不对。在我因为自己的过错而浪费别人的时间之前,我会为下一次检查这一切。这是SQL Server吗?你能用它来标记你的问题吗?它不是sql吗?但是好吧,对不起that@Faiz,SQL是一种查询语言,而不是产品。MS SQL Server是许多支持SQL语言的产品之一。您正在将值转换为
INT
,同时尝试
将其插入
日期
列(
OrderlineDateBase
)。啊,愚蠢的错误,我认为我的代码不对。在我因为自己的过错而浪费别人的时间之前,我会为下一次检查这一切。谢谢,即使date列可以为空,也会发生这种情况?谢谢,这是一个很好的问题。我不记得当日期列可为空时是否发生了错误,但我会测试它,如果我能找到我遇到问题的原始查询。即使日期列可为空,也会发生这种情况?谢谢,这是一个很好的问题。我不记得当date列可为null时是否发生了错误,但如果我能找到我遇到问题的原始查询,我将测试它。