0
當我運行以下查詢:UNION ALL查詢導致類型轉換錯誤,但聯盟不
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
查詢是目標字段中的日期/時間,並且空白字符串值是拋出錯誤的內容。努力解決這個現在...
爲什麼'UNION'截斷備註字段是它執行的查詢'DISTINCT',這意味着其原因它在所有領域分組。備註字段不能分組,所以Access將它們轉換爲文本。 – sigil 2013-05-08 15:50:05
@sigil。 。 。我認爲大多數其他數據庫在這種情況下會產生錯誤,而不是改變類型。然而,它確實提供瞭解釋你原來的問題的'union'和'union all'之間的區別。同時,做兩個插入也可以解決問題。 – 2013-05-08 16:04:35
我正在測試你的方法。 – sigil 2013-05-08 16:22:10