当我运行以下查询时:
INSERT INTO outRawTbl
SELECT *
FROM (select * from [out|noRFI_BS_noRT]
union all
select * from [out|noRFI_BS_RT]) AS [%$##@_Alias];
我收到此错误:
Microsoft Access set 3854 field(s) to Null due to a type conversion failure
当我将查询运行为:
时INSERT INTO outRawTbl
SELECT *
FROM (select * from [out|noRFI_BS_noRT]
union
select * from [out|noRFI_BS_RT]) AS [%$##@_Alias];
然后我没有得到这种类型转换错误,并且所有数据都成功插入。我需要使用UNION ALL
,因为查询中的某些字段是备注字段,如果我使用UNION
,它们将被截断为255个字符。
我想我可以开始尝试从查询中一次插入一个字段,但每个查询中大约有50个字段,这将花费大量时间。有没有一种快速的方法可以找出导致UNION ALL
问题的字段?
编辑:
解决并发现了另一个问题。我认为Gordon的想法是将查询作为单独的INSERT
操作而不是使用UNION ALL
来运行。然后我遍历查询中的每个字段,使用以下代码执行单独的插入以查找导致转换错误的字段:
Sub findProblemField()
Dim qdf As QueryDef
Dim sql As String
Dim fld As Field
For Each qdf In CurrentDb.QueryDefs
If InStr(qdf.Name, "out|") Then
For Each fld In qdf.Fields
sql = "insert into outrawtbl select top 1 " & _
"[" & qdf.Name & "].[" & fld.Name & "] from [" & qdf.Name & "]"
CurrentDb.Execute sql, dbFailOnError
Next
End If
Next
End Sub
这让我发现SELECT
查询中的字符串之一是目标字段中的日期/时间,空字符串值是抛出错误的内容。正在努力解决这个问题......
答案 0 :(得分:4)
我不知道为什么MS Access会因union all
而导致union
失败。它应该产生相同的数据。我也不知道为什么备忘录字段会在一种情况下被截断,而不会截断另一种情况。
但是,使用union all
解决问题的最简单方法是执行两次插入:
INSERT INTO outRawTbl
select * from [out|noRFI_BS_noRT];
insert into outRawTbl
select * from [out|noRFI_BS_RT];