1

Oracle サーバーに対して openquery を使用してコードを正常に実行できません。

手順全体の一部のみを提示する必要があったため、フィールド名/データ型は考慮しないでください。かなり長いです。問題は引用符などにあると思います...

手順は問題なくコンパイルされます。プロシージャを実行するたびに、エラーが発生します。

引用: Msg 105, Level 15, State 1, Line 53 文字列 'SELECT TO_NUMBER(XYZ_1) XYZ_1, XYZ_2,

cast (''''0'''' as number(5)) as B1, cast(''''1753-01-01'''' as date) NULL_DATE

私は道に迷っています - 抜けている引用符をどこに置くべきですか?

コード:

コード: [すべて選択] [表示/非表示] CREATE TABLE #tmpXYZ ヘッダー ( [XYZ_1] [int] PRIMARY KEY, [XYZ_2] varchar, [XYZ_3] varchar, -- more fields
[XYZ_N] varchar )

宣言 @sqlInv nvarchar(3000) セット @sqlInv =

    'insert into #tmpXYZ Header (
    [XYZ_1],
    [XYZ_2],
    [XYZ_3],
    -- more fields
    [XYZ_N]

)

select
    * FROM OPENQUERY(XYZ_ORACLE, 
    ''SELECT TO_NUMBER(XYZ_1) XYZ_1,
    XYZ_2,

    cast (''''0'''' as number(5)) as B1, 
    cast(''''1753-01-01'''' as date) NULL_DATE,
    -- more fields
    cast ('''' '''' as varchar(20)) as A19 

from XYZ.V_HEADER 
where

    (DATE >= ''''TO_DATE(''''' + @startDate + ''''', ''''YYYYMMDD'''')'''' AND 
    DATE <= ''''TO_DATE(''''' + @endDate + ''''', ''''YYYYMMDD'''')'''' AND 
    QWE = ''''0'''' AND
    ABC = ''''13'''' ) '' )
' 

exec sp_executesql @sqlInv
4

1 に答える 1

0

私が間違っていない限り、文字列を渡しています。したがって、引用符で挿入を開始します。

その後、select to_number(XYZ_1) XYZ_1, ...... を二重引用符で囲みます。文字列を再度 openquery コマンドに渡しているためです。

しかし、なぜキャストステートメントの間に 4 つの引用符を入れているのですか? 引用符をエスケープするには、2 つの引用符を入力するだけです。私がこれを間違えていない限り、あなたの間違いがあると思います。

于 2012-12-06T23:53:06.393 に答える