Мне интересно, можно ли получить реальное имя таблиц/полей, из которых исходит каждое поле в выражении выбора.Как получить информацию о инструкции SQL Select
Допустим, у вас есть две таблицы, кредиторы и дебиторы имеют поля Код, имя и телефон.
Если пользователь вводит следующую инструкцию SQL:
SELECT Code AS CustomerCode, Name AS CustomerName, Phone AS ContactNumber FROM Debtors.
Это приведет к SQL сервер возвращает имена полей CustomerCode, CUSTOMERNAME и ContactNumber.
Можно ли получить с SQL-сервера какие-то метаданные, которые сопоставляют каждое поле с его реальным именем и таблицей?
Программно, учитывая инструкцию SQL select, я хочу иметь возможность определять реальное имя каждого поля и настоящее имя таблиц, из которых они происходят.
Я не хочу самостоятельно анализировать SQL, поэтому я подумал, что может быть отправлено сообщение на сервер sql и вернуть эту информацию без данных строки.
Что мы пытаемся сделать, это реализовать безопасность на уровне таблиц и полей. Пользователь может ввести оператор sql для выбора полей из таблицы или нескольких таблиц (с использованием объединений) и отображения результатов в таблице. Поля динамически добавляются к элементу управления сеткой, но только те, которые пользователю разрешено видеть.
Если пользователь присоединяется к нескольким таблицам, как мы знаем программно, какие поля приходят из какой таблицы? проблема ухудшается, если они используют псевдонимы в SQL.
В настоящее время это работает над старым встроенным движком sql (который использует проприетарную базу данных), который может вернуть всю необходимую информацию таблицы/поля без данных строки, поэтому часть модели безопасности приложений построена вокруг этого. Однако перемещение этого приложения на нечто вроде SQL-сервера может оказаться затруднительным, если мы не сможем заставить это работать.
Помимо сервера Sql, любые другие базы данных sql поддерживают этот тип функциональности?
Это сложно сделать в общем, потому что столбцы набора результатов не всегда отображаются непосредственно в столбцы таблицы.(на самом деле их часто нет). У вас может быть столбец результатов, который представляет собой сумму значений в строках в таблице A и таблице B. Или у вас может быть таблица, данные которой используются для соединения, которое не показано в наборе результатов. – payne