2012-02-08 68 views
3

我有一個INSERT INTO的正常工作與參數爲常數:INSERT INTO與MS-訪問子查詢和參數不工作

INSERT INTO FinalValidityCodes 
         (tblReceivedSamplersID, Substudy, Location, FinalValidityCode, DateTimeProcessed) 
SELECT  ID, true, 'I', 0, now() 
FROM   tblReceivedSamplers 
WHERE  (SampleID = ?) 

這將影響1行(預期)

然而,如果我更改查詢以使用參數,它將允許它運行,但不會影響任何行。

INSERT INTO FinalValidityCodes 
         (tblReceivedSamplersID, Substudy, Location, FinalValidityCode, DateTimeProcessed) 
SELECT  ID, ?, ?, ?, ? 
FROM   tblReceivedSamplers 
WHERE  (SampleID = ?) 

什麼是差異,爲什麼當我使用參數時,插入看起來會失敗?

編輯:

SampleID是一個文本數據類型。

+0

也許我錯誤地解釋了語法。我要通過這個例子:http://decoding.wordpress.com/2008/10/11/sql-server-insert-into-with-subquery/。這似乎是在他的查詢INSERT INTO Orders(customer_id,order_date)SELECT id,GETDATE()FROM Customers WHERE username ='john.smith'' GETDATE()不需要是select語句中的列,而是插入'orders.order_date'。 – Brad 2012-02-08 18:20:52

+0

我認爲這個鏈接的作用確實有效,但是想想它爲什麼起作用是非常有意義的。我更喜歡你的方式。數值來自哪裏以及它們在查詢中的作用更清晰。 – Brad 2012-02-08 20:22:14

回答

2

它看起來像INSERT的目的是添加一行到FinalValidityCodes與5個字段的值。但是,這些值中的4個將直接由查詢參數提供,並且ID/tblReceivedSamplersID將從另一個參數派生。

所以我會嘗試一個DLookup()表達式來獲取ID(使用SampleID的參數),並將該值與其他4個參數值一起插入。這是一個未經測試的猜測。

INSERT INTO FinalValidityCodes (
    tblReceivedSamplersID, 
    Substudy, 
    Location, 
    FinalValidityCode, 
    DateTimeProcessed 
    ) 
VALUES (
    DLookup("ID", "tblReceivedSamplers", "SampleID ='" & param1 & "'"), 
    param2, 
    param3, 
    param4, 
    param5 
    ); 
+0

我喜歡這種方法。最終的工作語法與你寫的有些不同,但我編輯它。 – Brad 2012-02-08 20:25:21

+0

我批准了編輯。感謝你這樣做。我假定ID ... oops的數字數據類型。抱歉缺少逗號。 – HansUp 2012-02-08 20:29:07

+0

是的,沒問題。這絕對是正確的方向。謝謝! – Brad 2012-02-08 20:34:24