2017-02-27 50 views
0

SSISのOLEDBコマンドで簡単なクエリを実行しようとすると、説明できないエラーが発生します(下記参照)。SSIS OLEDBコマンドが失敗する - 不明なエラー

私のクエリはSQL Serverでうまく動作しますが、実行を簡単にするためにいくつかの調整を行いましたが、役に立たないようにしました。

DECLARE @Gender [nvarchar](6) 
DECLARE @Ready [nvarchar](12) 
DECLARE @DOB [datetime] 

SET @Gender=? 
SET @Ready=? 
SET @DOB=? 


IF @Gender = 'M' 
    SET @Gender='Male' 
IF @Gender = 'F' 
    SET @Gender='Female' 
IF @Ready='Y' 
    SET @DOB=NULL 

INSERT INTO [dbo].[PHI_CLIENT_PROFILES] 
([col43], 
[col13], 
[col22], 
[col10], 
[origin] 
) 
VALUES 
(@DOB, @Gender, ?, ?, ?) 

と、エラーメッセージ:

検証エラー。データフロータスク:データフロータスク:SSISエラーコード DTS_E_OLEDBERROR。 OLE DBエラーが発生しました。エラーコード: 0x80004005。 OLE DBレコードが利用可能です。出典:HRESULT「SQL Server用のMicrosoft OLE DB プロバイダー」:0x80004005の説明:「構文 エラーまたはアクセス違反」

+1

パラメータマッピングタブには7つの変数がありますか? – billinkc

+0

@billinkcいいえ私はそのエラーのためではない、paramページは* NOT *リフレッシュされます。私は100の異なる矛盾を試し、行ごとにコードを追加/削除したので、paramページは古くなっています(行ごとに1つのパラメタが表示されるため、1つのパラメータが表示されます)。コードを壊す前は、paramページには何も表示されませんでした – LearnByReading

+0

@billinkcまた、変数の部分に問題があるように見えるようにしてください。 SSIS OLEDB COMMANは変数を受け入れますか?私は単純なコードを試してみましたが、うまくいきましたが、私はこの作業にはまったく新しいものです。 – LearnByReading

答えて

3

私はあなたがそこに意図されているかわからないが、あなたが挿入されたIDを必要としない限り、またはレガシー機能を呼び出す場合は、OLE DB Commandの必要はありません。この変換を使用してSQL INSERTステートメントのみを1つのテーブルに実行すると、各行が別々のバッチとして実行されるので避けてください。代わりに宛先コンポーネントを試してください。

は内蔵の表現機能derived columnコンポーネントおよび使用を追加します。例:

DerivedGender :  
    [Gender] == "M" ? "Male" : "Female" 
DerivedDOB : 
    [Ready] == "Y" ? NULL(DT_DBTIMESTAMP) : [DOB] 
... 

変換後、OLE DB宛先コンポーネントを使用します。

場合によっては、Foreach Loop Containerがタスクを解決できるかどうかをチェックする価値があります。

+0

ありがとうございます。私は実際にこのタスクを使用していませんでした。 – LearnByReading

+0

あなたのケースは間違っています:GenderがM、Maleの場合、GenderがFなら女性(他には存在しません)、どのように表現できますか?ありがとう – LearnByReading

+1

'[性別] ==「M」? "男性":[性別] == "F"? "女性": "無効" –

関連する問題