0

我正在尝试查询一组文件。在 15 个中,我必须查询其中 3 个返回错误:消息 7314,级别 16,状态 1,第 1 行链接服务器“此处的服务器名称”的 OLE DB 提供程序“IBMDASQL”不包含表“系统。 lib. 文件”。该表不存在或当前用户对该表没有权限。

我正在使用 SQL 并使用 IBMDASQL 驱动程序制作了一个链接服务器。

就像我说的,15 个文件中的 3 个文件只给了我这个问题。

当我对文件执行 wrkobj 时,我看到 public 拥有所有权限,并且我添加了特定的用户帐户以防万一。

当我使用基本的 ODBC 和 microsoft 查询进行连接时,我什至看不到列表中的文件。当我直接登录 iSeries 时,我可以查看和操作这些文件。.

现在使用备用文件名。但是遇到插入错误。如所问,这是代码,然后是确切的错误。

INSERT INTO [PARKWAY-TRAIN].S60017.ORDERF912.NC_NURS_ORD_REF 
(RECORD_ID, NURSING_ORDER_CD, ORDER_DESCRIPTION, LONG_DESCRIPTION, ORDER_TYPE, FREQUENCY_CD, FREQ_PM_MAINT, NOTE_REQUIRED_STS, NOTE_TEMPLATE, TPL_STATUS, FORM_ID, PARAMETER_ID, COSIG_REQ)
SELECT STND.RECORD_ID, STND.NURSING_ORDER_CD, STND.ORDER_DESCRIPTION, STND.LONG_DESCRIPTION, STND.ORDER_TYPE, STND.FREQUENCY_CD, STND.FREQ_PM_MAINT, STND.NOTE_REQUIRED_STS, STND.NOTE_TEMPLATE, STND.TPL_STATUS, STND.FORM_ID, STND.PARAMETER_ID, STND.COSIG_REQ
FROM [MODEL2].TNICLN2.ORDERF143.NC_NURS_ORD_REF STND
WHERE STND.RECORD_ID <> 'D' AND NOT EXISTS (SELECT HOSP.NURSING_ORDER_CD FROM [PARKWAY-TRAIN].S60017.ORDERF912.NC_NURS_ORD_REF HOSP WHERE HOSP.NURSING_ORDER_CD = STND.NURSING_ORDER_CD)

错误消息:链接服务器“PARKWAY-TRAIN”的 OLE DB 提供程序“IBMDASQL”返回消息“SQL0104:令牌。无效。有效令牌:。原因...... . 不是有效标记。有效标记的部分列表是 。此列表假定该语句在该标记之前是正确的。错误可能在语句中较早出现,但该语句的语法在此之前似乎是有效的point. Recovery ... : 执行以下一项或多项操作并再次尝试请求: -- 验证令牌区域中的 SQL 语句 .. 更正语句。错误可能是缺少逗号或引号,它可能是拼写错误的单词,也可能与从句的顺序有关。 -- 如果错误标记是 ,更正 SQL 语句,因为它没有以有效的子句结尾。”。消息 7343,级别 16,状态 2,第 1 行链接服务器“PARKWAY-TRAIN”的 OLE DB 提供程序“IBMDASQL”无法插入表“[PARKWAY” -火车].[S60017].[ORDERF912].[NC_NURS_ORD_REF]"。

如果我只运行代码的 Select 部分,我会得到准确的返回 503 行。只有当我输入代码的插入部分时它才会失败。

IBM 说要更正令牌。不过,我不知道哪个令牌有误要纠正。

4

1 回答 1

0

“找不到表”错误非常可疑。使用 STRSQL:

select table_name, table_schema, 
base_table_name, base_table_schema, base_table_member, 
system_table_name, system_table_schema 
from systables 
where table_name = 'NC_NURS_ORD_REF'

检查以查看库 ORDERF912 中名为 NC_NURS_ORD_REF 的表确实与库 ORDERF912 中的系统表名 NCORDER 相关联。

语法错误同样可疑。鉴于这是一个跨系统查询,我怀疑您是否能够从 IBM i STRSQL 命令按原样运行它。这意味着在 i 端设置了正确的多系统数据库配置。

我发现有人有类似的问题,看起来它在微软方面:http ://bytes.com/topic/db2/answers/447753-error-inserting-into-iseries-db2-table-long-name-via -sql-server-2000-linked-server 我认为他的解决方法是使用 OPENQUERY() 表单。

您绝对可以在 IBM i 端检查的一件事是是否为 ORDERF912.NC_NURS_ORD_REF 开启了日志功能。这很重要,因为您需要使用正确的提交级别。获取上一个针对 SYSTABLES 的查询的结果,并使用 SYSTEM_TABLE_NAME 执行 DSPFD。查找文本“文件当前已记录”。如果表没有被记录,您有多种选择。最好的选择是开始记录文件,但如果这不可用,请尝试 INSERT... WITH NC。或者关闭司机的承诺控制。

此外,请查看以下 IBM 技术说明以确保正确设置链接服务器:http ://www-01.ibm.com/support/docview.wss?uid=nas8N1014514

于 2014-07-24T14:52:51.573 回答