2013-11-15 8 views
1

Как эффективно вставлять несколько строк без использования цикла для всех значений идентификатора учетной записи?Множественная вставка для каждого идентификатора учетной записи?

INSERT INTO Table1 
(AccountID, ShowColumns, GroupColumns, AvgColumnsFlag) 
VALUES 
(1, 'foo1', 'foo2', 'foo3') 
(1, 'abc1', 'abc2', 'abc3') 
(1, 'xyz1', 'xyz1', 'xyz1') 

В этом случае у меня более 20 000 учетных записей. Я могу использовать одну другую таблицу с уникальным идентификатором учетной записи и сделать какое-то соединение для ее получения. Затем используйте его вместо отображаемого примера ID учетной записи «1».

Я не знаю, как вы, ребята, работаете с несколькими вставками для каждого идентификатора учетной записи.

Благодаря ...

[Редактировать]

я нашел способ вставить, используя данные из другой таблицы в последнее время, но, к сожалению, я могу вставить только 1 строку, а не несколько строк. :-(Посмотреть код ниже ... Можно ли объединить 3 из них в 1 вместо

INSERT INTO tblDealerSavedDataMyInventorySavedBuilds 
    (AccountId, LoadDefault, BuildName, ColumnShowAndSortOrderValues, ColumnGroupByValues, ColumnSortAverageValues) 
    SELECT DISTINCT tblaAccounts.AccountID, 0, 'My Inventory by Count', 'ImportStatus|StockNumber|Vin|Year|Make ASC|Model ASC|Trim|Mileage|PurchasePrice|StockDate|RepairCost|TotalCost|DaysInInventory|InventoryTrackerLocation|Category', 'Make|Model', 'MyInventoryCount-SortOrderByCount' 
    FROM tblaAccounts 
    ORDER BY tblaAccounts.AccountID ASC 

INSERT INTO tblDealerSavedDataMyInventorySavedBuilds 
    (AccountId, LoadDefault, BuildName, ColumnShowAndSortOrderValues, ColumnGroupByValues, ColumnSortAverageValues) 
    SELECT DISTINCT tblaAccounts.AccountID, 0, 'My Inventory by Make', 'ImportStatus|StockNumber|Vin|Year|Make ASC|Model ASC|Trim|Mileage|PurchasePrice|StockDate|RepairCost|TotalCost|DaysInInventory|InventoryTrackerLocation|Category', 'Make|Model', 'MyInventoryCount-SortOrderByMake' 
    FROM tblaAccounts 
    ORDER BY tblaAccounts.AccountID ASC 

INSERT INTO tblDealerSavedDataMyInventorySavedBuilds 
    (AccountId, LoadDefault, BuildName, ColumnShowAndSortOrderValues, ColumnGroupByValues, ColumnSortAverageValues) 
    SELECT DISTINCT tblaAccounts.AccountID, 0, 'My Inventory by Purchase Price', 'ImportStatus|StockNumber|Vin|Year|Make ASC|Model ASC|Trim|Mileage|PurchasePrice|StockDate|RepairCost|TotalCost|DaysInInventory|InventoryTrackerLocation|Category', 'Make|Model', 'MyInventoryCount-SortOrderByCost' 
    FROM tblaAccounts 
    ORDER BY tblaAccounts.AccountID ASC 
+0

Вопрос не очень ясен, откуда взялись данные? Я думаю, что вы хотите [Insert with Select] (http://www.sqlteam.com/article/using-select-to-insert-records) –

+0

Я думаю, что решение для вас было бы 'INSERT INTO Table1 SELECT .. '.. но можете ли вы опубликовать несколько примеров того, как вы собираетесь использовать другую таблицу? –

+0

В какой таблице хранится 20 000 идентификаторов аккаунта? И вам нужны только эти три строки для каждого идентификатора учетной записи, поэтому в общей сложности 60000 строк? Какая версия SQL Server? –

ответ

0

Первая вставка в @SourceTable все значения

Тогда используйте этот оператор:.

INSERT INTO Table1 
SELECT * 
FROM @SourceTable 

это может выглядеть так же, но по-другому, так как вы фактически адресация таблицу один раз, вместо 20000 раз ..

Вы также можете сделать это следующим образом:

INSERT INTO Table1 
SELECT 1, 'foo1', 'foo2', 'f003' 
UNION ALL 
SELECT 2, 'abc11', 'abc2', 'abc3' 
UNION ALL 
... 
+0

Почему вы даже отправляете второй вариант, если первого достаточно? –

+0

Потому что создание и заполнение '@ SourceTable' может быть немного сложнее. –

0

Чтобы вставить несколько строк с жестко закодированных значений используйте

insert into table (col1, col2, col3) 
select 1, 'foo1', 'foo2', 'f003' 
union all 
select 2, 'abc11', 'abc2', 'abc3' 

т.д.

Для вставки из существующих данных

insert into table (col1, col2, col3) 
select srccol1, srccol22, srccol33 
from TableOrView 
Смежные вопросы