如何进行多次插入?

时间:2011-03-21 16:29:02

标签: sql-server tsql

我有两个表,Person和Role。

我想搜索人员表,找到住在奥克兰的所有人。如果他们住在奥克兰,请在PersonRole表中为他们分配一个管理员角色。

因为真实数据集在人员表中有100行,所以我强烈希望运行的查询或查询首先搜索Person表,检索Person_ID值,然后以某种方式对检索到的数据进行多次插入。

所以,请帮忙!

示例数据

人员表

PERSON_ID ....名称........市

0 ...................戴夫........奥克兰

1 ...................简........奥克兰

2 ...................史蒂夫.......旧金山

角色表

ROLE_ID ....作用

0 ..............经理

1 ..............助理

PersonRole

PERSON_ID ...... ROLE_ID

2 个答案:

答案 0 :(得分:3)

INSERT INTO PersonRole
            (Person_ID,
             Role_ID)
SELECT Person_ID,
       0 AS Role_Id
FROM   Person
WHERE  City = 'Oakland';

您可以添加

EXCEPT
SELECT Person_ID,
       Role_ID
FROM PersonRole      

如果一些奥克兰居民可能已经是管理者(假设SQL Server 2005 +),那就到底了。

答案 1 :(得分:1)

如果向“人员角色”添加左连接,则可以确保该记录尚不存在。

INSERT INTO PersonRole 
  (PersonID, 
   Role_ID)
SELECT
   p.Person_ID,
   0
FROM Person p
LEFT JOIN PersonRole pr ON 
   pr.Person_ID = p.Person_ID 
   AND pr.Role_ID = 0  --Make sure the record doesn't already exist
WHERE 
   p.City = 'Oakland' 
   AND pr.Person_ID IS NULL --Make sure the record doesn't already exist