[Извинения за длинное многословное объяснение]
Я унаследовал старое приложение с базой данных SQL от (очень!) Старого продукта, и мне нужно сделать некоторые отчеты непосредственно по БД. Не совсем уверен, ПОЧЕМУ, но это структура, которую я раскрыл:
У меня есть таблица групп и таблица отчетов.
Группы имеют столбец type
, 'R' или 'G', целое число numElements
и столбец image
с именем elements
Тип «R» означает, что группа содержит отчеты, «G» означает, что она содержит больше групп.
type = 'G'
elements = 0x2C002600
numelements = 2
result = take chunks of 4 characters,
reverse the last and first two character pairs to get 002C and 0026
convert hex to int to get 44 and 38
44 и 38 - два идентификатора группы - я могу проверить это из самого приложения.
То же самое относится к типу 'R', где результатом ID являются Отчеты
Есть ли способ отобразить это поведение в EF4 ИЛИ T-SQL, чтобы я мог начать делать некоторые разумные запросы?
например, * * 1 022
If type = G and numElements = 3
split the hex string into 3 chunks of 4 characters,
reverse character pairs,
convert to int,
map to Groups
If type = R and numElements = 11
split the hex string into 11 chunks of 4 characters,
reverse character pairs,
convert to int,
map to Reports
Существуют тысячи отчетов и сотни групп, поэтому, хотя в приложении я вижу группы, сопоставление их вручную заняло бы вечность. Древовидная структура отсутствует, поэтому мне нужно открыть группу, чтобы увидеть, что в ней содержится, затем открыть подгруппы (если есть) и т. Д. И т. Д.
Я знаю, что могу кодировать это вручную и проходить построчно и извлекать, разбивать, переворачивать, конвертировать ... но мне было интересно, если бы я мог заставить T-SQL или EF сделать это для меня?
EDIT:
Обратите внимание, что numElements является переменной, поскольку группа может содержать 1: много групп или 1: много отчетов (но не их смесь). Поэтому шестнадцатеричная строка всегда:
Длина символов «0x» + «4 x numElements»
Это означает, что функция «hex to int» должна иметь возможность возвращать массив или аналогичный элемент, чтобы 1 группа могла быть связана со многими группами / отчетами.