如何解决MS-Access中的“input参数值”错误

此代码和另一个正在生成Ms-Access中的逻辑错误,它要求参数等于对象名称。 在这种情况下,它需要[DSRT_ERS]。[ID]。

INSERT INTO DSRT_ERS SELECT * FROM DSRT_TEMP WHERE [DSRT_ERS].[ID] <>[DSRT_TEMP].[ID]; 

如果您查看数据库的文档,您会注意到它拼写正确。

 Table: DSRT_ERS Properties AlternateBackShade: 100 AlternateBackTheme -1 AlternateBackTint: 100 BackShade: 100 BackTint: 100 DatasheetForeTheme -1 DatasheetGridlinesTh -1 DateCreated: 6/17/2015 10:15:19 AM DefaultView: 2 DisplayViewsOnShar 1 FilterOnLoad: False GUID: {guid {BC8AFE53- 8AE3-42B9-AA5A- HideNewField: False LastUpdated: 6/17/2015 10:21:50 AM NameMap: Long binary data OrderByOn: False OrderByOnLoad: True Orientation: Left-to-Right ReadOnlyWhenDisco False RecordCount: 1022 ThemeFontIndex: -1 TotalsRow: False Updatable: True Columns Name Type Size ID Text 255 AggregateType: -1 AllowZeroLength: True AppendOnly: False Attributes: Variable Length CollatingOrder: General ColumnHidden: False ColumnOrder: Default ColumnWidth: Default CurrencyLCID: 0 DataUpdatable: False DisplayControl: Text Box Format: @ GUID: {guid {A1301DB4-C42E-4B73-A84B- IMEMode: 0 IMESentenceMode: 3 OrdinalPosition: 1 Required: False ResultType: 0 SourceField: ID SourceTable: DSRT_ERS TextAlign: General UnicodeCompression: False 

我不确定在这一点上做什么。 类似的查询产生这个结果(但是具有不同的参数),并且所有这些都需要被修复。 如果有人能提供一些指导,将不胜感激。

尝试这个。 这将从DSRT_TEMP表中排除[DSRT_ERS]。[ID],并只插入过滤的logging。

 INSERT INTO DSRT_ERS SELECT * FROM DSRT_TEMP WHERE [DSRT_TEMP].[ID] NOT IN (Select [DSRT_ERS].[ID] FROM [DSRT_ERS] WHERE [DSRT_ERS].[ID] IS NOT NULL) 

有两个选项,你有NOT INNOT EXISTS由@deoethbuild议。 请记住,select一个。

如果子查询(内部查询)返回less量的数据, [NOT] IN运算符可以提供更好的性能。

如果子查询返回大量的数据[NOT] EXISTS运算符是可取的。

如果你想摆脱suquery,你也可以使用Left Outer Join

 INSERT INTO DSRT_ERS SELECT * FROM DSRT_TEMP LEFT Outer JOIN [DSRT_ERS] ON [DSRT_TEMP].[ID] = [DSRT_ERS].[ID] WHERE [DSRT_ERS].[ID] IS NULL 

似乎只想插入目标中尚不存在的行。

您不能直接在SELECT中引用目标表。 改为不存在,而不是:

 INSERT INTO DSRT_ERS SELECT * FROM DSRT_TEMP WHERE NOT EXISTS ( SELECT * FROM DSRT_ERS WHERE [DSRT_ERS].[ID] =[DSRT_TEMP].[ID] );