¿Cómo transformar el lenguaje natural en la consulta SQL? Consultas difusas imprecisas.sqlf
Pregunta
Me gustaría implementar una función, que permita al usuario escribir algo como esto:
"select * from products where low(price);"
Lo que es igual a:
"select * from products where (price >=0) And (price <= 50);"
¿Tal vez conoce alguna solución que sea útil para mí? Mi segunda pregunta es ¿en qué parte de la estructura de la aplicación debo transformarla? En el código de aplicación o de alguna manera en la base de datos?
Mi aplicación está escrita en C# y se conecta a SQL Server 2008 a través de ADO.NET.
Estaría muy agradecido por cualquier pista, pseudocódigo, etc.
Gracias por adelantado !
Solución
SQL Server le permite definir funciones definidas por el usuario (ver Por ejemplo este artículo). Si definió una función low
Luego, el primer código que escribió sería una consulta SQL perfectamente válida y no necesitaría hacer ningún procesamiento previo. La declaración se vería más o menos así:
CREATE FUNCTION low(@price)
RETURNS boolean AS
BEGIN
RETURN (@price >= 0) AND (@price <= 50)
END
Si desea permitir un lenguaje más difuso que solo las llamadas de funciones, entonces ese sería otro problema (y significativamente más complicado). No conozco ninguna biblioteca que haga eso e implementando que usted mismo podría ser un desafío. (Es posible que desee agregar más ejemplos, para que podamos ver lo que quiere decir).
Por supuesto, si permite que el usuario escriba consultas SQL sin procesar, el usuario debe ser alguien en quien pueda confiar (porque puede eliminar fácilmente todos los datos de su base de datos).