Вставка в 2 таблицы выберите результат таблицы SQL Server - PullRequest
2 голосов
/ 24 февраля 2011

Как вставить в 2 таблицы результат из оператора select.

У меня есть таблица с несколькими данными:

val1 val2 val3 .... valn
-------------------------
 12   21   54        78
 ..   ..    ..       ..

У меня есть что-то вроде: Select t1.val1, t1.val2, t2.val3, t2.val4 into table1 t1 , table2 t2 from tablename.

Поэтому я хочу, чтобы val1, val2 были вставлены в новую таблицус 2 полями, такими как:

tabble1:
id fieldvalue
1   val1
2   val2

то же самое относится к val3 и val4.Как это может быть достигнуто

tabble2:
id fieldvalue
1   val3
2   val4

Возможно ли это?

Ответы [ 2 ]

2 голосов
/ 24 февраля 2011

Конечно, трудно понять, чего вы пытаетесь достичь.Если вы на самом деле пытаетесь вставить строки в две разные таблицы, как указано в 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.

0 голосов
/ 24 февраля 2011

У вас не может быть одного оператора вставки, который создает две строки из 1 столбца и имеет значения из разных столбцов.

Просто создайте один оператор вставки для каждого столбца, как в предположении, что поле id является автоинкрементным столбцом.

insert into table1 (fieldname)
select val1 from tableName

insert into table1 (fieldname)
select val2 from tableName

insert into table1 (fieldname)
select val3 from tableName

insert into table1 (fieldname)
select val4 from tableName
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...