#sql
Вопрос:
Моя проблема в том, что я хотел бы получить имена столбцов, типы и т. Д… не только из одной таблицы или представления, но и из любого запроса select. Например, при соединении 2 таблиц.
Если запрос select выглядел так:
Select * from employees
Тогда результат, который он будет выдавать, будет иметь такие столбцы, как этот:
SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'Employees'
Теперь мне нужно что-то подобное, но оно должно работать с гораздо более сложными вариантами, такими как этот, например.
select e.EmployeeId,e.EmployeeName, et.type, et.IsPermanent
from Employee e
inner join EmployeeType et
on e.EmployeeId = et.EmployeeId
Проблема в том, что это может быть любой запрос выбора, и я не знаю, что пользователь введет в мое приложение. Мне просто нужен способ получить информацию о колонке из чего угодно.
Комментарии:
1. Чего именно вы хотите достичь? Какую «информацию о колонке» вы ищете? Имена выбранных столбцов должны присутствовать в результате. Какую систему баз данных вы используете?
2. Что-то вроде этого: ВЫБЕРИТЕ COLUMN_NAME ИЗ INFORMATION_SCHEMA.COLUMNS, ГДЕ TABLE_NAME = «Сотрудники», Но в любом соединении таблиц, а не только в одной таблице. Я думаю, что база данных Microsoft sql
3. И что плохого в использовании именно этого заданного запроса? Кроме того, вы должны знать, какую систему баз данных использует ваше приложение
4. Проблема в том, что он возвращает информацию только из одной таблицы. Мне нужно что-то, что может возвращать ту же информацию, но формировать гораздо более сложные выборки, чем просто одна таблица. Я имею в виду, присоединяется и т. Д…
5. Когда приложение (будь то Java, C#, что угодно) отправляет запрос в СУБД, СУБД отправляет не только значения результатов, но и типы данных столбцов этого результата, поэтому приложение знает, представляет ли значение строку, дату, число,… Итак, что, по вашему мнению, вы должны делать сами в своем приложении? Какой язык программирования и библиотеки вы используете для доступа к базе данных?
Ответ №1:
Хорошо, к счастью, я решил свою проблему с помощью SqlDataReader:
var columnNames = Enumerable.Range(0,reader.FieldCount).Select(reader.GetName).ToList();
var columnFieldTypes = Enumerable.Range(0, reader.FieldCount).Select(reader.GetFieldType).ToList();