2012-12-06 36 views
1

我無法用openquery成功運行代碼到oracle服務器。從Openquery選擇Oracle,缺少引號?

請不要考慮字段名稱/數據類型,因爲我只能介紹整個過程的一部分。這很長。 我相信問題在於引號等...

程序編譯沒問題。 每次我執行該過程,將發生錯誤:

引用: 消息105,級別15,狀態1,行53 閉合的引號後的字符串「SELECT TO_NUMBER(XYZ_1)XYZ_1, XYZ_2,

鑄造( '' '' 0 '' '' 爲數字(5))作爲B1, 鑄造( '' '' 1753年1月1日 '' '' 如日期)NULL_DATE

我丟失 - 我應該把那些缺少的引號放在哪裏?

代碼:

代碼:[選擇所有] [顯示/隱藏] CREATE TABLE #tmpXYZ頭( [XYZ_1] [INT] PRIMARY KEY, [XYZ_2] VARCHAR, [XYZ_3] VARCHAR, - 多個字段
[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 

回答

0

除非我錯了,否則你正在傳遞一個字符串。 所以你用引號開始插入。

之後,您爲選擇to_number(XYZ_1)XYZ_1,...... 做了一個雙引號我認爲這是正確的,因爲您再次傳遞一個字符串到openquery命令。

但是你爲什麼要在演員陳述之間放4個引號。你只需要輸入兩個引號就可以避免引用。我認爲你的錯誤除非我弄錯了。

+0

不,同樣的錯誤:/ – user1883232