SQL and IBMDASQL



我正在尝试查询一组文件。在15中,我必须查询其中3个返回错误:留言7314,16层,1州,1线链接服务器"此处服务器名称"的OLE DB提供程序"IBMDASQL"不包含表"system.lib.file"。表不存在或者当前用户没有对该表的权限

我正在使用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: Token"。无效。有效令牌:。原因. . . . .:在token处检测到语法错误。令牌。不是有效的令牌。有效令牌的部分列表为。该列表假定语句直到令牌为止都是正确的。错误可能出现在语句的前面,但是到目前为止,语句的语法似乎是有效的。恢复……:执行以下一个或多个操作并再次尝试请求:——验证令牌区域中的SQL语句…纠正这个说法。错误可能是缺少逗号或引号,可能是拼写错误的单词,也可能与子句的顺序有关。——如果错误令牌是,纠正SQL语句,因为它没有以一个有效的子句结束。Msg 7343, 16层,2州,1线链接服务器"PARKWAY-TRAIN"的OLE DB提供者"IBMDASQL"无法插入表"[PARKWAY-TRAIN].[S60017].[ORDERF912].[NC_NURS_ORD_REF]"。

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

IBM说要更正令牌。

" Table not found "错误非常可疑。使用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…数控。或者关闭驱动程序的承诺控制。

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

相关内容

  • 没有找到相关文章

最新更新