Sql server Sql查询中的循环(While,For)

Sql server Sql查询中的循环(While,For),sql-server,tsql,Sql Server,Tsql,我有一个用于用户的表,另一个用于角色的表,以及它们之间的一个表访问 如何向SQL查询中的所有用户添加角色 表用户: ID Name ... 1 5 9 10 11 表角色: Id .... 10 11 12 表访问权限: UserID RoleID 1 10 2 10 3 10 4 10 我想用循环来做,从用户的第1行到最后 更新: 我正在使用: DECLARE @roleId int SET @ro

我有一个用于
用户
的表,另一个用于
角色
的表,以及它们之间的一个表
访问

如何向SQL查询中的所有用户添加角色

用户

ID  Name ...
1
5
9
10
11
角色

Id ....
10
11
12
访问权限

UserID    RoleID
1           10
2           10
3           10
4           10
我想用循环来做,从用户的第1行到最后

更新:

我正在使用:

DECLARE @roleId int

SET @roleId = 79

INSERT INTO Access (Users.code, @roleId)
   SELECT code, @roleId 
   FROM Users
我得到一个错误:

“@roleId”附近的语法不正确

然后,如果愿意,还可以添加一个where。听起来你不想这么做,所以我不会给出一个例子,但你可以想象这个查询如何被扩展来做更复杂的事情

如果您拥有适当的唯一密钥,则可能需要执行以下操作:

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
您还可以通过切换用户并执行以下操作将其添加到所有角色:

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

我不明白您在
…访问(Users.code,…)
中试图做什么。这是一个语法错误。我编辑了这个问题。正如我在回答中所说的,只需使用
插入Access(UserID,
。不要指定
用户。code
@user3780058你解决了你的问题吗?我发现这个问题仍然在未回答的队列中。如果我的回答对你有帮助,请接受我的回答,如果没有,我希望继续提供帮助。