Mam ciąg reprezentujący zapytanie SQL i muszę wyodrębnić nazwy tabel z tego łańcucha. Na przykład:Jak parsować instrukcję SQL Query dla nazw tabel
SELECT * FROM Customers
Zwróci "Klienci". Lub
SELECT * FROM Customers c, Addresses a WHERE c.CustomerName='foo'
SELECT a.AddressZip FROM Customers c
INNER JOIN Addresses a ON c.AddressId=a.AddressId
Zwróci "Klienci, adresy". Coraz bardziej zaawansowane:
(SELECT B FROM (SELECT C FROM (SELECT Element AS C FROM MyTable)))
po prostu wrócić „mojatabela”
(uwaga, może mam typo'd zapytania, ale masz pomysł).
Jaki byłby najlepszy/najdokładniejszy sposób osiągnięcia tego?
Pytanie "dlaczego?" przychodzi mi na myśl .... –
Czy celujesz w konkretny RDBMS/Dialect? Jest kilka pytań dotyczących SO analizowania SQL, np. http://stackoverflow.com/questions/589096/parsing-sql-code-in-c Nic szczególnie rozstrzygającego, co widziałem. –
Jeśli chodzi o "dlaczego", to dlatego, że parsuję plik dziennika zapytań i wyświetlam najczęściej odwiedzane tabele, operacje itp. Nie, że to powinno mieć znaczenie :) Jeśli chodzi o to, na co celuję, jest to MS-SQL. – esac