如何从数据库中为每个选定的行执行插入

时间:2012-11-22 15:30:29

标签: sql sql-server sql-server-2008 tsql stored-procedures

我正在尝试制作以下存储过程:
- 获取int

的列表
select ItemId from Items -- this returns: 1,2,3,4,5,6
  • 在程序的第二部分中,我必须在另一个表中为每个选定的数字添加行。
    类似的东西:

    以前的结果中的foreach ItemId 插入表(ItemIdInAnotherTable)值(ItemId)
    更新

    我想念一个重要问题。 在另一部分程序中,当我在另一个表中插入所选项时,需要插入更多列。像这样:

    插入dbo.ItemsNotificator (用户ID,项目Id) (13879,(从项目中选择ItemId))

所以这不是一个专栏。抱歉混淆:(

4 个答案:

答案 0 :(得分:6)

编辑: 假设表[table]已经存在,并且如果User是常量,那么这样做:

INSERT INTO [table](UserId, ItemIdInAnotherTable) 
   SELECT 13879, ItemId 
   FROM Items;

如果UserId完全来自另一个表,您需要弄清楚UserId和ItemId之间需要什么关系。例如,如果所有用户都链接到所有项目,那么它是:

INSERT INTO [table](UserId, ItemIdInAnotherTable) 
   SELECT u.UserId, i.ItemId 
   FROM Items i CROSS JOIN Users u;

如果表[table]尚不存在,那么您可以使用SELECT INTO,并指定一个新的表名(例如存储在#temp中的tempdb表)

SELECT u.UserId, i.ItemId 
   INTO #tmpNewTable
   FROM Items i CROSS JOIN Users u;

新创建的表中的列将具有名称UserIdItemId,并且具有相同的类型。

答案 1 :(得分:1)

对我来说很简单:

 INSERT INTO ItemIdInAnotherTable (ItemId)
 SELECT ItemId from Items

答案 2 :(得分:0)

这正是普通insert命令的作用。做这样的事情:

insert into Table (ItemID) 
    select ItemID from Items;

答案 3 :(得分:0)

使用INSERT INTO..SELECT声明

INSERT INTO ItemIdInAnotherTable (ItemId)
SELECT ItemId 
FROM   Items