2012-02-08 70 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