我无法使用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
答案 0 :(得分:0)
除非我错了,否则你传递一个字符串。 所以你用引号开始插入。
然后你为select to_number(XYZ_1)XYZ_1做一个双引号,...... 我认为这是正确的,因为你再次传递一个字符串到openquery命令。
但是为什么要在演员陈述之间加上4个引号。你只需要输入2个引号来逃避报价。我认为除非我弄错了,否则你的错误。