如何解决"输入参数值" MS-Access中的错误

时间:2015-06-17 15:25:09

标签: sql excel vba tsql ms-access

此代码和另一个代码在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

我不确定此时该怎么做。类似的查询会生成此结果(但具有不同的参数),并且所有这些都需要修复。如果有人能提供一些指导,我们将不胜感激。

2 个答案:

答案 0 :(得分:2)

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

您无法直接在SELECT中引用目标表。改为将其更改为NOT EXISTS:

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

答案 1 :(得分:2)

试试这个。这将从DSRT_TEMP表中排除[DSRT_ERS]。[ID]并仅插入过滤后的记录。

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)

有两个选项,@ deoeth建议您NOT INNOT EXISTS。 请记住选择一个。

如果子查询(内部查询)返回少量数据,[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