我有一个角色和权限表,其中包含一个名为 role_permissions 的连接表。
对于每个角色,如果该角色尚未拥有该权限,我想插入一个新权限。我的循环的问题是只有一行(角色)被更新。该循环似乎没有正确地重新评估每个循环上的子查询(它找到第一个没有权限的角色)
DECLARE @role_id INT
SET @role_id = (SELECT TOP 1 role_id FROM p_role_permissions WHERE NOT EXISTS (SELECT NULL FROM p_role_permissions WHERE permission_id = 57))
WHILE @role_id IS NOT NULL
BEGIN
INSERT INTO p_role_permissions (role_id, permission_id) VALUES(@role_id, 57)
-- does not appear to evaluate correctly (works only on the first loop)
SET @role_id = (SELECT TOP 1 role_id FROM p_role_permissions WHERE NOT EXISTS (SELECT NULL FROM p_role_permissions WHERE permission_id = 57))
END