Как извлечь все имена таблиц и псевдонимы из операторов выбора qql в.net
Все мои арендованные таблицы на сервере sql имеют поле customer_id. Я пытаюсь написать перехватчик для NPoco, который будет извлекать все имена таблиц и псевдонимов из запроса. сопоставьте его со списком исключений таблиц, которые не являются арендаторами, и измените выбор, чтобы проверить ключ клиента всех таблиц арендатора в предложении where.
Мне очень трудно найти анализатор SQL, который может извлечь имена таблиц и псевдонимы из оператора SQL.
Хорошим решением было бы разобрать следующее утверждение.
SELECT fis.OrderDateKey, SUM(fis.SalesAmount) AS TotalSales
FROM FactInternetSales fis
Join product on fis.productid = product.productid
where p.name like 'prefix%'
GROUP BY fis.OrderDateKey
HAVING fis.OrderDateKey > 20010000
ORDER BY fis.OrderDateKey;
Предоставил бы мне достаточно информации, чтобы надежно построить словарь из 2 пунктов {"FactInternetSales", "fis"} и {"product", "product"}
До сих пор я нашел только токенизаторы, которые знают только типы, которые являются слишком общими для меня. (т.е. ключевое слово, идентификатор, оператор, текст). Есть ли что-нибудь, что может сделать такую работу в.net. Или есть более эффективные стратегии для добавления этих проверок арендаторов к каждому выполненному запросу?
2 ответа
Этот ответ был полезен при поиске решения моей проблемы.
Если кому-то интересно, это мой первый проход. На самом деле мы используем systemId в качестве нашего клиента, так что вы увидите это в коде. Пока что я обнаружил, что он не обрабатывает только запросы с подзапросами. Сейчас я углубляюсь в эту проблему, но я не могу ее добавить, поскольку подавляющее большинство потребностей моей команды решается здесь.
Извините, но у меня есть некоторые сомнения по поводу.
- У вас есть все таблицы на сервере, верно? в sys.tables у вас есть все имена таблиц. в sys.columns указываются имена столбцов этих таблиц, будьте осторожны со схемой. В sys.columns также есть user_types... Вы можете сопоставить эти таблицы с выбором для поиска таблиц и столбцов. Также есть системные таблицы views и хранимые процедуры, даже содержимое...
- Если таблицы не существует, выбор не работает, поэтому я не понимаю вопрос.
- Если вы используете профиль сервера sql (если можете), он может получить больше информации о любом запросе к базе данных.
- В Stackru вы должны написать часть кода или ссылку, связанную с какой-то работой, касающейся вашего вопроса. как.
Задайте мне любой вопрос, надеюсь помочь!!:)