타사 시스템에서 데이터를 추출해야합니다 (설계에 영향을주지 않습니다). SQL Server 2005 데이터베이스는 비트 맵을 사용하여 사용자 권한을 저장합니다. 최대 5 * 32 = 160 특권을 제공하는 5 개의 INT 필드가 있습니다. 그것은 많은 유형의 권한을 저장하고 각 유형에 대해 비트 맵을 다시 사용합니다. 그래서 전체적으로 권한을 운전하는 6 개의 필드가 있습니다. 각 권한은 주어진 유형의 특정 항목에 할당 될 수 있습니다.비트 맵에서 여러 행을 테이블에 삽입하는 방법
형식의 예로 "table"이 있으므로 해당 컨텍스트의 항목은 테이블 이름이됩니다.
특권 테이블은 다음과 같습니다
ID | PRIVTYPE | USERNAME | ITEMNAME | BITMAP1 | BITMAP2 | BITMAP3 | BITMAP4 | BITMAP5
예를
또 다른 표는 각 비트가 나타내는 권한을 포함123 | Table | Joe | Customers | 0x408 | 0x1 | 0x5c | 0x1000 | 0x0
하십시오. 그것은 다음과 같습니다 예를 들어
PRIVTYPE | BITMAP_ID | BITVALUE | PRIVILEGE_NAME
, 위의 비트 맵에 관한 항목은 다음과 같습니다
Table | 1 |0x8 | View
Table | 1 |0x400 | Edit
Table | 2 |0x1 | Report
Table | 3 |0x4 | View Address Data
Table | 3 |0x8 | View Order Data
Table | 3 |0x10 | View Payment Data
Table | 3 |0x40 | View System Data
Table | 4 |0x1000| View Hidden Fields
어떻게 든 하나 개의 기록을 가지고있는 새로운 테이블이나 뷰에 권한 테이블을 구문 분석 할 항목 당 사용자 당 권한. 이처럼 :
USERNAME | ITEMNAME |PRIVILEGE_NAME
Joe | Table | Customers | View
Joe | Table | Customers | Edit
Joe | Table | Customers | Report
Joe | Table | Customers | view Address Data
Joe | Table | Customers | view Order Data
Joe | Table | Customers | view Payment Data
Joe | Table | Customers | view System Data
Joe | Table | Customers | view Hidden Fields
나는 특권 테이블에서 각 행에 대해 여러 행을 반환하는 SELECT 문을 실행하여보기를 만들 필요가 있다고 생각 : 하나 개의 행을 비트 마스크 필드의 모든 설정 조금만. 예를 들어, 비트 맵에 3 비트가 설정된 권한 테이블의 단일 행은 3 개의 행을 반환합니다.
테이블을 여러 행으로 나누는 것에 대한 답변을 검색했습니다. 다양한 조인과 피벗을 살펴 봤지만 필요한 것을 할 수있는 것을 찾을 수 없습니다. 위가 가능합니까? 어떤 조언도 감사합니다 ...
그것은 아름답고 뛰어납니다. 고맙습니다!!! – starfry