|
Распарсить SQL запрос
|
|||
---|---|---|---|
#18+
Есть простой запрос Код: sql 1.
Как получить отсюда все используемые таблицы? Т.е. получить ответ вида: Table OtherTable Был подобный топик https://stackoverflow.com/questions/16692344/list-of-tables-used-in-an-sql-query но ответ оттуда почему-то не работает как надо, да и выполнять сам этот SQL запрос каждый раз для этого не очень хочется, теоретически таких может быть сотни. Может быть кто-то знает более простые способы как правильно распарсить SQL запрос? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.03.2021, 14:45 |
|
Распарсить SQL запрос
|
|||
---|---|---|---|
#18+
Santa89, вытаскивайте все слова после FROM и JOIN если не начинается на (. ... делов то на копейку ... |
|||
:
Нравится:
Не нравится:
|
|||
03.03.2021, 16:19 |
|
Распарсить SQL запрос
|
|||
---|---|---|---|
#18+
SQL2008 Santa89, вытаскивайте все слова после FROM и JOIN если не начинается на (. ... делов то на копейку или delete "Делов-то" немного, только если о простых селектах речь. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.03.2021, 16:28 |
|
Распарсить SQL запрос
|
|||
---|---|---|---|
#18+
SQL2008, Код: sql 1. 2. 3. 4. 5. 6.
... |
|||
:
Нравится:
Не нравится:
|
|||
03.03.2021, 16:33 |
|
Распарсить SQL запрос
|
|||
---|---|---|---|
#18+
Объекты, затронутые запросом Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40.
ЗЫ: Правильную работу с временными таблицами допилите сами. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.03.2021, 16:44 |
|
Распарсить SQL запрос
|
|||
---|---|---|---|
#18+
Гавриленко Сергей Алексеевич SQL2008 Santa89, вытаскивайте все слова после FROM и JOIN если не начинается на (. ... делов то на копейку или delete "Делов-то" немного, только если о простых селектах речь. я подсказал путь, а частности сами определяйте ... |
|||
:
Нравится:
Не нравится:
|
|||
03.03.2021, 16:46 |
|
Распарсить SQL запрос
|
|||
---|---|---|---|
#18+
SQL2008 я подсказал путь, а частности сами определяйте А ещё могут быть cross/outer apply с таблицами внутри. А ещё у джойнов могут быть хинты соединения (inner loop join, например). А ещё inner/cartesian join могут быть заданы просто перечислением таблиц через запятую в секции from. Список этих "ещё" можно продолжать до бесконечности. Пусть получается достаточно трудоёмким - тянет на написание парсера SQL. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.03.2021, 17:40 |
|
Распарсить SQL запрос
|
|||
---|---|---|---|
#18+
Сон Веры Павловны SQL2008 я подсказал путь, а частности сами определяйте А ещё могут быть cross/outer apply с таблицами внутри. А ещё у джойнов могут быть хинты соединения (inner loop join, например). А ещё inner/cartesian join могут быть заданы просто перечислением таблиц через запятую в секции from. Список этих "ещё" можно продолжать до бесконечности. Пусть получается достаточно трудоёмким - тянет на написание парсера SQL. это да! но у меня все проще, эти запросы пишут аналитики, их надо распарсить, там из соединений будет максимум Apply, а в основном - простые селекты, простые Inner - Left джойны) ... |
|||
:
Нравится:
Не нравится:
|
|||
03.03.2021, 17:48 |
|
Распарсить SQL запрос
|
|||
---|---|---|---|
#18+
Santa89, студия парсит простые запросы, надо выделить запрос и "открыть в построителе". ... |
|||
:
Нравится:
Не нравится:
|
|||
03.03.2021, 17:56 |
|
Распарсить SQL запрос
|
|||
---|---|---|---|
#18+
Можно попробовать создавать временную SP с этим запросом, потом запросить её зависимости через Код: sql 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
03.03.2021, 20:45 |
|
Распарсить SQL запрос
|
|||
---|---|---|---|
#18+
Santa89, Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
03.03.2021, 23:08 |
|
Распарсить SQL запрос
|
|||
---|---|---|---|
#18+
Попробовал воплотить свою мысль, вот так вот, похоже работает: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
referenced_entity_namecategoriesproducts ... |
|||
:
Нравится:
Не нравится:
|
|||
03.03.2021, 23:49 |
|
Распарсить SQL запрос
|
|||
---|---|---|---|
#18+
Правильный путь, на самом деле, подсказал invm Нужно получить план запроса в хml, а потом просто получить перечень упомянутых в нем таблиц. Проблема в том, что инструкцию SET SHOWPLAN_XML ON не впихнешь в динамический запрос. invm показал жутко интересный изврат :-) Я в таком случае просто написал CLR функцию, который получала текст запроса, устанавливала SET SHOWPLAN_XML ON внутри себя и возвращал xml план. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.03.2021, 08:13 |
|
Распарсить SQL запрос
|
|||
---|---|---|---|
#18+
uaggster Я в таком случае просто написал CLR функцию, который получала текст запроса, устанавливала SET SHOWPLAN_XML ON внутри себя и возвращал xml план. Ну вообще есть ещё вот такой вариант: 20058751 - как раз с использованием родного парсера SSMS. Правда, его всё равно придётся дорабатывать напильником - получать имена объектов конкатенацией TOKEN_ID, если они состоят из 2-3-4 частей, проверять, объекты ли это, а не CTE/подзапросы, итд итп. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.03.2021, 09:36 |
|
Распарсить SQL запрос
|
|||
---|---|---|---|
#18+
ShIgor Santa89, Код: sql 1.
Хороший вариант, спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
04.03.2021, 11:34 |
|
Распарсить SQL запрос
|
|||
---|---|---|---|
#18+
Santa89, Лучше скажите - зачем? Если ваяете data lineage, то: 1) обойтись таблицами зависимостей 2) динамику обработать отдельно, просто "сджойнив" её со списком таблиц (получите ложные совпадения, но довольно мало, если у вас имеется поддерживаемая система наименований) ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2021, 09:52 |
|
Распарсить SQL запрос
|
|||
---|---|---|---|
#18+
Santa89 ShIgor Santa89, Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2021, 10:22 |
|
Распарсить SQL запрос
|
|||
---|---|---|---|
#18+
Сон Веры Павловны SQL2008 я подсказал путь, а частности сами определяйте А ещё могут быть cross/outer apply с таблицами внутри. А ещё у джойнов могут быть хинты соединения (inner loop join, например). А ещё inner/cartesian join могут быть заданы просто перечислением таблиц через запятую в секции from. Список этих "ещё" можно продолжать до бесконечности. Пусть получается достаточно трудоёмким - тянет на написание парсера SQL. ну, что вы, не усложняйте "делов-то на копейку" (ц) "я подсказал путь, а дальше допиливайте сами" (ц) ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2021, 11:48 |
|
Распарсить SQL запрос
|
|||
---|---|---|---|
#18+
Ролг Хупин Сон Веры Павловны пропущено... А ещё могут быть cross/outer apply с таблицами внутри. А ещё у джойнов могут быть хинты соединения (inner loop join, например). А ещё inner/cartesian join могут быть заданы просто перечислением таблиц через запятую в секции from. Список этих "ещё" можно продолжать до бесконечности. Пусть получается достаточно трудоёмким - тянет на написание парсера SQL. ну, что вы, не усложняйте "делов-то на копейку" (ц) "я подсказал путь, а дальше допиливайте сами" (ц) Ну если без пинка ходить не умеете, то вот второй волшебный пендель: 1. Собираете все имена, после FROM, JOIN, MERGE, USING ... их не так много, не надорветесь. 2. Выделяете только имя, без баз и схем. [DB].[dbo].[table] - > table 3. Удаляете все имена, которых нет в списке таблиц sys.tables. Делов-то на 3 копейки. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2021, 18:00 |
|
Распарсить SQL запрос
|
|||
---|---|---|---|
#18+
SQL2008 Ролг Хупин пропущено... ну, что вы, не усложняйте "делов-то на копейку" (ц) "я подсказал путь, а дальше допиливайте сами" (ц) Ну если без пинка ходить не умеете, то вот второй волшебный пендель: 1. Собираете все имена, после FROM, JOIN, MERGE, USING ... их не так много, не надорветесь. 2. Выделяете только имя, без баз и схем. [DB].[dbo].[table] - > table 3. Удаляете все имена, которых нет в списке таблиц sys.tables. Делов-то на 3 копейки. Не нашел про синонимы, которых наверное не будет в sys.tables? и которые вообще могут быть реально в другой базе и даже на другом сервере. Делов-то на 3 копейки(ц) ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2021, 18:08 |
|
Распарсить SQL запрос
|
|||
---|---|---|---|
#18+
SQL2008 Делов-то на 3 копейки. Microsoft.SqlServer.Management.SqlParser.dll от последней редакции SSMS - почти 7 Мб скомпилированного в релизе кода. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2021, 18:15 |
|
Распарсить SQL запрос
|
|||
---|---|---|---|
#18+
Сон Веры Павловны SQL2008 Делов-то на 3 копейки. Microsoft.SqlServer.Management.SqlParser.dll от последней редакции SSMS - почти 7 Мб скомпилированного в релизе кода. Можно, кстати, на шарпе найти , сделать SQLCLR процедуру, "делов-то на 3.5 копейки" ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2021, 18:22 |
|
Распарсить SQL запрос
|
|||
---|---|---|---|
#18+
Ролг Хупин Можно, кстати, на шарпе найти , сделать SQLCLR процедуру, "делов-то на 3.5 копейки" Эта сборка и есть шарповая. Вопрос - в написании подобного в одно лицо "на 3 копейки". ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2021, 19:14 |
|
Распарсить SQL запрос
|
|||
---|---|---|---|
#18+
Ролг Хупин SQL2008 пропущено... Ну если без пинка ходить не умеете, то вот второй волшебный пендель: 1. Собираете все имена, после FROM, JOIN, MERGE, USING ... их не так много, не надорветесь. 2. Выделяете только имя, без баз и схем. [DB].[dbo].[table] - > table 3. Удаляете все имена, которых нет в списке таблиц sys.tables. Делов-то на 3 копейки. Не нашел про синонимы, которых наверное не будет в sys.tables? и которые вообще могут быть реально в другой базе и даже на другом сервере. Делов-то на 3 копейки(ц) Видите! Уже начали думать системно. Уже начали продумывать детали. Еще чуток и дозреете до SqlParser.dll. Самый лучший способ заставить человека думать это разозлить его, вывести из состояния "а чё я могу? ничё не могу!" сказав "Да это проще пареной репы!". Это,если хотите, технотроллинг. P.S. Был один русский профессор (кажется), так он давал ученикам заведомо невыполнимые задания, говорив при этом, что решение есть. Обманывал. Но любил смотреть как они рассуждают. Как отбрасывают неверные пути, как включают в рассмотрение любые варианты, анализируя их на предмет исполнения. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.03.2021, 08:21 |
|
Распарсить SQL запрос
|
|||
---|---|---|---|
#18+
Сон Веры Павловны Ролг Хупин Можно, кстати, на шарпе найти , сделать SQLCLR процедуру, "делов-то на 3.5 копейки" Эта сборка и есть шарповая. Вопрос - в написании подобного в одно лицо "на 3 копейки". да, но я имел в виду в исходных кодах , чтобы можно было самому там докуролесить от души ... |
|||
:
Нравится:
Не нравится:
|
|||
08.03.2021, 11:32 |
|
|
start [/forum/topic.php?fid=46&fpage=32&tid=1684993]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
41ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
68ms |
get tp. blocked users: |
2ms |
others: | 13ms |
total: | 167ms |
0 / 0 |