每个帐户ID的多个插入?

时间:2013-11-15 16:01:51

标签: sql-server

如何在不使用循环的情况下为所有帐户ID值有效地插入多行?

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

在这种情况下,我有超过20,000个帐户ID。我可以使用另一个具有唯一帐户ID的表,并进行某种加入以获得该功能。然后使用它代替显示的示例帐户ID“1”。

我不知道你们如何处理每个帐户ID的多个插入。

...谢谢

[编辑]

我发现了一种最近使用其他表中的数据插入的方法,但不幸的是我只能插入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

2 个答案:

答案 0 :(得分:0)

首先将所有值插入@SourceTable

然后使用此声明:

INSERT INTO Table1 
SELECT *
FROM @SourceTable

它可能看起来一样,但它有所不同,,因为你实际上只是在一次表中,而不是20,000次..

你也可以这样做:

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

答案 1 :(得分: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