我在Access中创建了一个查找表,以提供列的可能值。现在我需要使用转换列之前的数据更新此列。我无法找出一个可行的SQL查询。我不断收到错误“UPDATE或DELETE查询不能包含多值字段”。我的研究表明我只需要设置列的值,但这总是会更新0条记录:
UPDATE [table_name] SET [column_name].Value = 55 WHERE [table_name].ID = 16;
我知道如果我将其更改为更新文本列,此查询将起作用,因此这个列只是一个问题。
答案 0 :(得分:15)
如果要为多值字段添加值,请使用追加查询。
INSERT INTO table_name( [column_name].Value )
VALUES (55)
WHERE ID = 16;
如果要更改多值字段中存在的一个特定值,请使用UPDATE语句。例如,要将55更改为56 ...
UPDATE [table_name]
SET [column_name].Value = 56
WHERE [column_name].Value = 55 And ID = 16;
有关详细信息,请参阅Using multivalued fields in queries。
答案 1 :(得分: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;
这使我感到困惑,因为我期待UPDATE语句。我认为它实际上是将一条记录插入到一个隐藏表中,该表用于将多个值与该列相关联。
答案 2 :(得分:3)
我正在使用Sharepoint,我将表创建为多值字段,使用我的INSERT INTO
语句遇到错误,返回到Sharepoint以更改为非多值字段,但是没有解决它。
使用多值字段重新创建没有的表格,INSERT INTO
工作正常。
答案 3 :(得分:0)
我得说我没有很好地解决你的问题,但我在你的查询中看到了一些东西。试试这个:
UPDATE [table_name] SET [column_name]= 55 WHERE [table_name].ID = 16;
<强>更新强>:
查看this链接:它有一个示例
UPDATE Issues
SET Issues.AssignedTo.Value = 10
WHERE (((Issues.AssignedTo.Value)=6)
AND ((Issues.ID)=8));
注意
您应该始终包含WHERE 仅标识的子句 要更新的记录。 否则,您将更新记录 你不打算改变。一个 更新不包含的查询 WHERE子句更改了每一行 表。您可以指定一个值 变化
答案 4 :(得分:0)
不要使用.value部分
UPDATE [table_name] SET [column_name] = 55 WHERE [table_name].ID = 16;
答案 5 :(得分:0)
INSERT INTO Quals (cTypes.[value])
SELECT Quals_ContractTypes.ContractType
FROM Quals_ContractTypes
WHERE (Quals.ID = Quals_ContractTypes.ID_Quals);
答案 6 :(得分:-1)
“多值”字段是指具有列的表的Access数据库,允许您选择多个值,例如“组合复选框”列表。
THOSE 是SQL无法使用的唯一Access类型。我已经测试了所有Access查找可能性,包括硬编码值和查找表。它们工作正常,但是如果你有一个允许多个选择选项的列,那你就不走运了。即使使用下面提到的INSERT INTO,也无法正常工作,因为您会在插入多值字段时遇到类似但不同的错误。
如上所述,最好避免在Access之外使用此类表,并参考专门针对您的外部需求的表。然后编写一个宏/ vba脚本,用“辅助”表中的数据更新实际表。