Мне нужно извлечь данные из сторонней системы (я не влияю на ее дизайн). База данных SQL Server 2005 использует растровые изображения для хранения пользовательских привилегий. Он имеет пять полей INT, дающих максимум 5 * 32 = 160 привилегий. Он хранит несколько типов привилегий и повторно использует растровые изображения для каждого типа. Таким образом, в общей сложности есть 6 полей, которые управляют привилегиями. Каждая привилегия может быть назначена определенному элементу определенного типа.Как вставить несколько строк в таблицу из растрового изображения
Примером типа является «таблица», поэтому элементы в этом контексте будут именами таблиц.
Привилегия таблица выглядит следующим образом:
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
Я думаю, что нужно, чтобы создать представление, выполнив оператор выбора, который будет возвращать несколько строк для каждой строки в таблице привилегий: одну строку для каждого набора бит в поле Bitmask. Так, например, одна строка в таблице привилегий, которая имеет 3 бита, установленные в битмасках, приведет к возврату трех строк.
Я искал ответы о разбиении таблиц на несколько строк. Я рассматривал различные объединения и свопы, но я не могу найти то, что будет делать то, что мне нужно. Возможно ли это? Любое руководство оценивается ...
Это красиво и отлично. Спасибо!!! – starfry