Когда я запускаю следующий запрос:UNION ALL запрос вызывает ошибку преобразования типов, но UNION не
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
, потому что некоторые из полей в запросах являются полями Memo, и они будут усечены до 255 символов, если я использую UNION
.
Я думаю, я могу начать пытаться вставлять поля по одному из запросов, но в каждом запросе есть около 50 полей, и это займет много времени. Есть ли быстрый способ узнать, какое поле вызывает проблему с UNION ALL
?
EDIT: Решенная и непокрытая другая проблема. Я принял идею Гордона о выполнении запросов как отдельных операций 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' обрезает Memo поля является то, что он выполняет' DISTINCT' на запросе, а это означает, что он группируется во всех полях. Поля Memo не могут быть сгруппированы, поэтому Access передает их в Text. – sigil
@sigil. , , Я думаю, что большинство других баз данных генерируют ошибку в этой ситуации, а не изменяют тип. Тем не менее, он дает подсказку о различии между «union» и «union all», которые объясняют вашу оригинальную проблему. Тем временем, выполнение двух вставок также может решить проблему. –
Я сейчас тестирую ваш подход. – sigil