Есть ли способ получить информацию о столбце по любому заданному запросу в sql?

#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();