【发布时间】:2012-07-12 18:12:12
【问题描述】:
我有一个相当简单的数据库,由三个(相关)表组成:用户、权限和用户权限。基本前提很简单:创建用户时,权限表中的所有记录都会自动添加到 user_permissions 表中,并具有默认值。这一切都很好。
但是,由于我目前处于开发阶段,我会继续添加新权限,现有用户当然不会拥有这些权限,因为这些新权限在创建时不存在于权限表中。所以,我有一个绝妙的主意,创建了一个小存储过程来自动更新 user_permissions 表,其中包含 user_permissions 表中当前不存在的所有权限。
所以,简而言之,我想做的是(伪代码)
For each user without x permission in user_permissions, insert into user_permissions user_id and permission_id
我不太确定如何从 SQL POV 执行此操作。我玩过连接并且“不存在”,但还没有真正到达任何地方。
你可以在这里玩我的架构:http://sqlfiddle.com/#!3/b0761/3 提前感谢您的帮助!
编辑:架构:
CREATE TABLE users (
user_id int IDENTITY(1, 1) NOT NULL,
user_name varchar(255),
PRIMARY KEY (user_id));
CREATE TABLE permissions (
permission_id int IDENTITY(1, 1) NOT NULL,
permission_name varchar(255) NOT NULL,
PRIMARY KEY (permission_id));
CREATE TABLE user_permissions (
user_id int NOT NULL,
permission_id int NOT NULL,
value tinyint DEFAULT 0 NOT NULL,
PRIMARY KEY (user_id,
permission_id));
ALTER TABLE user_permissions ADD CONSTRAINT FK_user_pe338140
FOREIGN KEY (permission_id)
REFERENCES permissions (permission_id);
ALTER TABLE user_permissions ADD CONSTRAINT FK_user_pe405324
FOREIGN KEY (user_id) REFERENCES users (user_id);
INSERT INTO users(user_name) values('test_username');
INSERT INTO users(user_name) values('test_username2');
INSERT INTO permissions(permission_name) VALUES('permission_1')
INSERT INTO permissions(permission_name) VALUES('permission_2')
INSERT INTO user_permissions(user_id, permission_id, value)
VALUES(1, 1, 1)
INSERT INTO user_permissions(user_id, permission_id, value)
VALUES(2, 1, 1)
编辑:查询到目前为止
SELECT a.user_id, b.permission_id, 1 as 'value'
FROM USER_PERMISSIONS a right outer join
PERMISSIONS b on a.permission_id = b.permission_id
【问题讨论】:
-
这个问题没有回答我如何为每个用户插入这些记录的问题。
标签: sql sql-server sql-server-2005 stored-procedures