2015-06-17 84 views
1

此代碼和另一個正在生成Ms-Access中的邏輯錯誤,它要求參數等於對象名稱。在這種情況下,它需要[DSRT_ERS]。[ID]。如何解決MS-Access中的「輸入參數值」錯誤

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

如果你看看DB的文檔,你會注意到它拼寫正確。

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

試試這個。這會從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) 

有兩種選擇,你有NOT INNOT EXISTS通過@deoeth建議。 請記住選擇一個。

如果子查詢(內部查詢)返回少量數據,[NOT] IN運算符可能會提供更好的性能。

如果子查詢返回大量數據[NOT] EXISTS運算符更可取。

您還可以使用左外連接,如果你想擺脫suquery的

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 
+0

,如果有一個NULL在NOT IN返回這將失敗,至少添加一個'WHERE [DSRT_ERS]。[ ID] IS NOT NULL' – dnoeth

+0

@dnoeth: - right,modified – HaveNoDisplayName

+0

Eek。可以爲空的ID。我認爲這不太可能,但是OP的表格似乎允許。 – GolezTrol

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] 
); 
相關問題