【发布时间】:2016-07-09 11:15:40
【问题描述】:
我有一个 select 语句,它将我的日期列转换为 varchar,然后转换为在 SSMS 中工作的 int,并给出了我想看到的结果。在 SSIS 中它开始抛出错误,所以我决定在我的 select 语句中使用表变量并将数据发送到那里,然后使用该数据使用 SSIS 数据流将其插入到我的主表中。
我的选择语句给出了错误:
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
【问题讨论】:
-
这是 SQL Server 吗?你能用那个标记你的问题吗?
-
不是sql吗?但是好的,对此感到抱歉
-
@Faiz,SQL 是一种查询语言,而不是一种产品。 MS SQL Server 是支持 SQL 语言的众多产品之一。
-
您将值转换为
INT,同时尝试将INSERT转换为DATE列(OrderlineDateBase)。 -
啊,愚蠢的错误,我认为我的代码不正确。下次我会检查这一切,以免因我的错而浪费其他人的时间。谢谢
标签: sql-server