Конечно, трудно понять, чего вы пытаетесь достичь.Если вы на самом деле пытаетесь вставить строки в две разные таблицы, как указано в marc_s, вы должны использовать два оператора вставки.
Однако, судя по вашему примеру, вы можете не пытаться вставить в две таблицы, а использовать две таблицы для вставки в третью таблицу, в которую вы переносите данные.Если это так, то вы можете сделать это одним оператором:
Insert MysteryTable( Id, fieldvalue )
Select 1, val1
From Table1
Union All
Select 2, val2
From Table1
Union All
Select 3, val3
From Table2 --assuming these come from Table2. Isn't clear in the OP
Union All
Select 4, val4
From Table2 --assuming these come from Table2. Isn't clear in the OP
Конечно, если в Table1 или Table2 много строк, то вы, очевидно, получите много строк с одинаковым значением Id в вашемMysteryTable.
Обновить данное изменение на OP
С учетом вашего разъяснения, то, что вы ищете, может быть выполнено, но требует двух запросов, аналогичных приведенному выше.
Insert Table1( Id, fieldvalue )
Select 1, val1
From SourceTable
Union All
Select 2, val2
From SourceTable
Insert Table2( Id, fieldvalue )
Select 1, val3
From SourceTable
Union All
Select 2, val4
From SourceTable
Еще один вариант, который генерирует ваши значения идентификаторов:
With NumberedItems As
(
Select val1 As val
From SourceTable
Union All
Select val2
From SourceTable
)
Insert Table1(id, fieldname)
Select Row_Number() Over( Order By val ) As Num
, val
From SourceTable
With NumberedItems As
(
Select val3 As val
From SourceTable
Union All
Select val4
From SourceTable
)
Insert Table2(id, fieldname)
Select Row_Number() Over( Order By val ) As Num
, val
From SourceTable
Кстати, в приведенном выше примере я использовал Union All
, однако, если вы пытаетесь нормализовать данные, вы можете захотеть иметь разныеценности.В этом случае вы бы использовали Union
вместо Union All
.