【问题标题】:Select from Openquery to Oracle, missing quotation?从 Openquery 选择到 Oracle,缺少报价?
【发布时间】:2012-12-06 17:47:26
【问题描述】:

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

请不要考虑字段名称/数据类型,因为我只需要展示整个过程的一部分。它很长。 我相信问题出在引号等...

程序编译好了。 每次执行过程都会报错:

引用: 消息 105,第 15 级,状态 1,第 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

我迷路了——我到底应该把那些缺少的引号放在哪里?

代码:

代码:[全选] [显示/隐藏] 创建表 #tmpXYZ 标题 ( [XYZ_1] [int] 主键, [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

【问题讨论】:

    标签: sql oracle


    【解决方案1】:

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

    然后,您为 select to_number(XYZ_1) XYZ_1, ...... 我认为这是正确的,因为您再次将字符串传递给 openquery 命令。

    但是你为什么要在演员表之间加上 4 个引号。您只需输入 2 个引号即可转义引号。我认为这是你的错误,除非我弄错了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-23
      • 2020-11-24
      • 1970-01-01
      • 2021-06-30
      • 1970-01-01
      • 1970-01-01
      • 2014-01-03
      • 2019-04-06
      相关资源
      最近更新 更多