在Sql查询中循环(While,For)

时间:2014-07-13 04:24:24

标签: sql-server tsql

我有Users的表格和Role的另一个表格以及他们之间的表格Access

如何在SQL查询中为所有用户添加角色?

User

ID  Name ...
1
5
9
10
11

Role

Id ....
10
11
12

Access

UserID    RoleID
1           10
2           10
3           10
4           10

我想用Loop做,意味着从User的第1行到结束

更新:

我正在使用:

DECLARE @roleId int

SET @roleId = 79

INSERT INTO Access (Users.code, @roleId)
   SELECT code, @roleId 
   FROM Users

我收到错误:

  

@ roleId'附近的语法不正确。

1 个答案:

答案 0 :(得分:2)

DECLARE @roleId ...;

INSERT INTO Access (UserID, RoleID)
SELECT ID, @roleId
FROM Users

然后你也可以添加一个你想要的地方。这听起来不像你想要的,所以我不会给出一个例子,但你可以想象这个查询如何扩展以做更复杂的事情。

如果您拥有相应的唯一键,则可能需要执行以下操作:

DECLARE @roleId ...;

INSERT INTO Access (UserID, RoleID)
SELECT ID, @roleId
    FROM Users
    WHERE ID NOT IN (SELECT UserID FROM Access WHERE RoleID = @roleId)

您还可以通过切换它来执行以下操作,将用户添加到所有角色:

DECLARE @userId ...;

INSERT INTO Access (UserID, RoleID)
SELECT @userId, ID
FROM Roles