2016-03-22 28 views
0

私の日付カラムをvarcharに変換し、intに変換したselect文がSSMSで動作していました。 SSISではエラーが発生し始めたので、selectステートメントでテーブル変数を使用してそこにデータを送信し、そのデータをSSISデータフローを使用してメインテーブルに挿入することにしました。オペランドタイプクラッシュ:intは日付と互換性がありません

私の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 
+0

このSQL Serverはありますか?あなたはその質問にタグを付けることができますか? – trincot

+0

それはsqlではありませんか?しかし、大丈夫、それについて申し訳ありません – Faiz

+0

@ファイズ、SQLは、クエリ言語ではなく、製品です。 MS SQL Serverは、SQL言語をサポートする多くの製品の1つです。 – jarlh

答えて

3

あなたのフィールドの一部(OrderlineCreateDate等)dateが、intタイプではありません。しかしCONVERT(VARCHAR(8), field, 112)フィールドdateと予想しているため、データ型の競合があります。

これらのフィールドが実際にタイプintであることを意図している場合は、それらをvarcharに変換してからintに再度変換する理由が不思議に思うかもしれません。

そして、それをdateとするテーブルに挿入します。

関連する問題