Как извлечь все имена таблиц и псевдонимы из операторов выбора 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 в качестве нашего клиента, так что вы увидите это в коде. Пока что я обнаружил, что он не обрабатывает только запросы с подзапросами. Сейчас я углубляюсь в эту проблему, но я не могу ее добавить, поскольку подавляющее большинство потребностей моей команды решается здесь.

Извините, но у меня есть некоторые сомнения по поводу.

  1. У вас есть все таблицы на сервере, верно? в sys.tables у вас есть все имена таблиц. в sys.columns указываются имена столбцов этих таблиц, будьте осторожны со схемой. В sys.columns также есть user_types... Вы можете сопоставить эти таблицы с выбором для поиска таблиц и столбцов. Также есть системные таблицы views и хранимые процедуры, даже содержимое...
  2. Если таблицы не существует, выбор не работает, поэтому я не понимаю вопрос.
  3. Если вы используете профиль сервера sql (если можете), он может получить больше информации о любом запросе к базе данных.
  4. В Stackru вы должны написать часть кода или ссылку, связанную с какой-то работой, касающейся вашего вопроса. как.

Задайте мне любой вопрос, надеюсь помочь!!:)

Другие вопросы по тегам