更新Access中的多值字段

rsr*_*ins 8 sql ms-access

我在Access中创建了一个查找表,以提供列的可能值.现在我需要使用转换列之前的数据更新此列.我无法找出一个可行的SQL查询.我不断收到错误"UPDATE或DELETE查询不能包含多值字段".我的研究表明我只需要设置列的值,但这总是更新0条记录:

UPDATE [table_name] SET [column_name].Value = 55 WHERE [table_name].ID = 16;
Run Code Online (Sandbox Code Playgroud)

我知道如果我将其更改为更新文本列,此查询将起作用,因此这只是一个问题.

Han*_*sUp 15

如果要向多值字段添加值,请使用追加查询.

INSERT INTO table_name( [column_name].Value )
VALUES (55)
WHERE ID = 16;
Run Code Online (Sandbox Code Playgroud)

如果要更改多值字段中存在的一个特定值,请使用UPDATE语句.例如,要将55更改为56 ...

UPDATE [table_name]
SET [column_name].Value = 56
WHERE [column_name].Value = 55 And ID = 16;
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请参阅在查询中使用多值字段.

  • 好的。就我而言,我还必须先删除以清除该列。例如:DELETE columnName.Value FROM tableName WHERE columnName.Value > -1;。 (2认同)

rsr*_*ins 5

我已经弄清楚了!这肯定是违反直觉的!您必须使用INSERT语句进行更新。

-- Update a record with a multi-valued field that has no value
INSERT INTO [table_name] ( [[column_name].[Value] )
VALUES(55)
WHERE [table_name].ID = 16;
Run Code Online (Sandbox Code Playgroud)

这让我感到困惑,因为我期待一个UPDATE语句。我认为它实际上是将记录插入到一​​个隐藏表中,该表用于将多个值与此列相关联。

  • 我想你把它钉了。在幕后,多值字段已按照您的描述实施。但是这些细节为“方便”而隐藏(?)。无论如何,这种混淆是避免使用多值字段的一个很好的理由,IMO。我使用它们的唯一原因是与SharePoint一起使用。 (4认同)