Tengo una cadena que representa una consulta SQL, y necesito extraer los nombres de las tablas de esa cadena. Por ejemplo:Cómo analizar una instrucción SQL Query para los nombres de las tablas
SELECT * FROM Customers
Devolvería "Clientes". O
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
Devolvería "Clientes, direcciones". Conseguir más avanzada:
(SELECT B FROM (SELECT C FROM (SELECT Element AS C FROM MyTable)))
simplemente volver "MyTable"
(Nota, puede que haya typo'd las consultas, pero usted consigue la idea).
¿Cuál sería la mejor/más precisa forma de lograr esto?
La pregunta "¿Por qué?" viene a la mente ... –
¿Está apuntando a cualquier RDBMS/Dialecto en particular? Hay algunas preguntas sobre SO sobre el análisis SQL, p. http://stackoverflow.com/questions/589096/parsing-sql-code-in-c Nada particularmente concluyente que he visto. –
En cuanto a 'por qué' es porque estoy analizando un archivo de registro de consultas y mostrando las tablas, operaciones, etc. más accedidos, no es que importe :) En cuanto a a qué me estoy dirigiendo, es MS-SQL. – esac