从Openquery到Oracle选择,缺少报价?

时间:2012-12-06 17:47:27

标签: sql oracle

我无法使用openquery成功运行代码到oracle服务器。

请不要考虑字段名称/数据类型,因为我只需要提供整个过程的一部分。这很长。 我认为问题在于引号等......

程序编译好了。 每次执行该过程时,都会发生错误:

引用: 消息105,第15级,状态1,第53行 字符串'SELECT TO_NUMBER(XYZ_1)XYZ_1后的未闭合的引号, XYZ_2,

施放(''''''''作为数字(5))为B1, cast('''''1753-01-01'''作为日期)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

1 个答案:

答案 0 :(得分:0)

除非我错了,否则你传递一个字符串。 所以你用引号开始插入。

然后你为select to_number(XYZ_1)XYZ_1做一个双引号,...... 我认为这是正确的,因为你再次传递一个字符串到openquery命令。

但是为什么要在演员陈述之间加上4个引号。你只需要输入2个引号来逃避报价。我认为除非我弄错了,否则你的错误。