Sql server 操作数类型冲突:int与日期不兼容
我有一个select语句,它将我的日期列转换为varchar,然后转换为int,这在SSMS中起作用,并给出了我想要看到的结果。在SSIS中,它开始抛出错误,因此我决定在select语句中使用表变量并将数据发送到那里,然后使用该数据使用SSIS数据流将其插入主表中 我的select语句出现错误: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
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时是否发生了错误,但如果我能找到我遇到问题的原始查询,我将测试它。