SQL-запрос для имени поля, типа поля и значения поля
Допустим, у меня есть таблица, как показано ниже
pp_refno pp_rectype _pp_account pp_empid pp_dept
---------------------------------------------------------
90221 contractor 061509864 C00001121 1111000139
Можно ли написать запрос, чтобы данные возвращались в этом формате?
field_name field_type field_value
---------------------------------------------------------
pp_refno int 90221
pp_rectype char contractor
pp_account char 061509864
pp_empid char C00001121
pp_dept char 1111000139
2 ответа
Да, это возможно при использовании информационной схемы базы данных, которую вы используете. Однако вам нужно добавить 1 столбец, чтобы иметь возможность использовать это для нескольких строк:
field_name field_type field_value pp_refno
--------------------------------------------------------------
pp_refno int 90221 90221
pp_rectype char contractor 90221
pp_account char 061509864 90221
pp_empid char C00001121 90221
pp_dept char 1111000139 90221
Таким образом, вы можете идентифицировать несколько записей.
Также вам придется написать или сгенерировать конкретный запрос для каждой таблицы, который может быть большим и медленным из-за того, как работают данные.
Если вы просто извлекаете отдельные строки, вы также можете использовать хранимую процедуру для отображения ваших данных заданным способом.
Вы можете использовать функцию UNPIVOT SQL-запроса для достижения этого поведения. Ниже ссылка дает вам больше идей с похожим примером.
Чтобы прочитать тип столбца, вам нужно объединить таблицы sys и получить типы столбцов.
SELECT DATA_TYPE
FROM INFORMATION_SCHEMA.COLUMNS
WHERE
TABLE_NAME = 'yourTableName' AND
COLUMN_NAME = 'yourColumnName'
Как только вы получите псевдоним unpivot-таблицы, вы сможете присоединить его к таблице SCHEMA.columns и реализовать свою логику