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