1 つのオプションは、すべての project_xxx テーブルからビューを作成することです。次のようなもの:
CREATE VIEW SecurityTable
AS
SELECT 'Project_1', User, HasAccess
FROM Project_1
UNION
SELECT 'Project_2', User, HasAccess
FROM Project_2
UNION
SELECT 'Project_3', User, HasAccess
FROM Project_3
etc...
次に、あたかもデータベースがそもそも適切に設計されているかのように、ビューをクエリするだけです;-)
SELECT ProjectID, User
FROM SecurityTable
WHERE [criteria]
AND HasAccess=1
新しいプロジェクト テーブルを頻繁に追加するとおっしゃっていますが、セキュリティ テーブルに毎朝動的クエリを入力することをお勧めします。例:
CREATE TABLE Project_1 (
Usr varchar(20),
HasAccess bit)
GO
CREATE TABLE Project_2 (
Usr varchar(20),
HasAccess bit)
GO
CREATE TABLE SecurityTable (
Usr varchar(20),
HasAccess bit)
GO
INSERT INTO Project_1 (Usr, HasAccess) VALUES ('Kermit', 1)
INSERT INTO Project_1 (Usr, HasAccess) VALUES ('MissPiggy', 1)
INSERT INTO Project_2 (Usr, HasAccess) VALUES ('Beaker', 1)
INSERT INTO Project_2 (Usr, HasAccess) VALUES ('TheCount', 0)
GO
Create Procedure LoadSecurityTable
AS
DELETE * FROM SecurityTable
EXEC sp_MSForEachTable
@command1 = 'INSERT INTO SecurityTable (Usr, HasAccess) SELECT Usr, HasAccess FROM ?',
@whereand = 'AND o.name LIKE ''Project_%'''
GO
EXEC LoadSecurityTable
SELECT * FROM SecurityTable