SET ENGINEBEHAVIOR
26/03/2020
Permite la compatibilidad del motor de datos SQL con Visual FoxPro 7.0, 8.0 y 9.0.
SET ENGINEBEHAVIOR 70 | 80 | 90
Parámetros
70
Especifica que Visual FoxPro trata los comandos SQL con comportamiento como en las versiones anteriores a Visual FoxPro 8.0.80
Especifica que Visual FoxPro trata los comandos SQL con comportamiento como en Visual FoxPro 8.0.La siguiente tabla describe el comportamiento de la instrucción SQL SELECT.
SQL SELECT clause Behavior DISTINCT
No puede usar la cláusula DISTINCT con los campos Memo o General. En su lugar, ajuste un campo Memo dentro de una función como PADR () o ALLTRIM ().
Para más información, ver PADL( ) | PADR( ) | PADC( ) Functions y ALLTRIM( ) Function.
UNION
La cláusula UNION no admite campos Memo a menos que la cláusula ALL se incluya en la instrucción SQL SELECT .
GROUP BY
La cláusula GROUP BY debe enumerar todos los campos de la lista SELECT, excepto los campos contenidos en una función agregada, como la función COUNT (). Además, la cláusula GROUP BY también debe enumerar todos los campos en una cláusula HAVING, excepto los campos contenidos en una función agregada.
Por ejemplo, el siguiente código genera un error porque la compañía de campo no figura en la cláusula GROUP BY.
SELECT company, country FROM Customer GROUP BY country
HAVING
Una instrucción SQL SELECT puede contener la cláusula HAVING sin la cláusula GROUP BY, siempre que la instrucción SQL SELECT no contenga ninguna función agregada.
Por ejemplo, el siguiente código filtra los resultados de la consulta especificando que el campo del país debe ser igual a "Sweden".
SELECT customerid FROM customers HAVING country="Sweden"
LIKE
Las instrucciones SQL SELECT no eliminan automáticamente los espacios finales de los valores en comparación con la operación LIKE. En versiones anteriores a Visual FoxPro 8.0, ambos valores en la operación LIKE se recortaron desde la derecha antes de la evaluación.
Por ejemplo, el siguiente código supone que tiene una tabla llamada tabla1, y la tabla tiene tres filas que contienen valores de "1.", "12" y "123", respectivamente.
SELECT * FROM table1 WHERE column1 LIKE "1__"
Visual FoxPro 7.0 y versiones anteriores devuelve una fila con el valor de "123". Visual FoxPro 8.0 devuelve tres filas con los valores "1", "12" y "123".
Si el comienzo de la condición del filtro coincide con el patrón de la expresión en la operación LIKE, y el resto de la condición del filtro contiene espacios finales, la operación LIKE ignora los espacios finales y devuelve True (.T.). Los espacios finales en el patrón no se ignoran.
90
Especifica que Visual FoxPro trata los comandos SQL con el comportamiento estándar de Visual FoxPro 9.0. Esta es la configuración predeterminada.La siguiente tabla describe el comportamiento de la instrucción SQL SELECT.
Table 2 SQL SELECT clause Behavior
TOP nExpr
Cuando habilita esta configuración, incluir la cláusula TOPnExpr [PERCENT] en el comando SELECT de SQL no devuelve más de nExpr [PERCENT] registros. Además, el motor SQL usa la memoria disponible de manera más eficiente y acelera la evaluación de la cláusula TOP sin la palabra clave PERCENT cuando trabaja con grandes conjuntos de resultados, condiciones de poca memoria o ambos.
GROUP BY
Cuando utiliza funciones agregadas, como MAX(), en el comando SQL SELECT sin una cláusula GROUP BY, y el sistema no encuentra ningún registro coincidente, Visual FoxPro devuelve un conjunto de resultados con un único registro y establece _TALLY en 1. En versiones anteriores a Visual FoxPro 9.0, el sistema no devuelve ningún registro y establece _TALLY en 0.
ORDER BY
Un comando SELECT ... DISTINCT ... ORDER BY generará un error si el campo ORDER BY especificado no está en la lista de campos SELECT.
CREATE CURSOR foo (f1 int, f2 int) SELECT DISTINCT f1 FROM foo ORDER BY f2 INTO CURSOR resHAVING
Un comando SELECT … DISTINCT … HAVING generará un error si el campo HAVING especificado no está en la lista de campos SELECT.
CREATE CURSOR foo (f1 int, f2 int) SELECT DISTINCT f1 from foo HAVING f2>1 INTO CURSOR res
Observaciones
El alcance de SET ENGINEBEHAVIOR es global.
El uso de SET ENGINEBEHAVIOR configurado en 70 puede generar resultados ambiguos de los comandos SQL SELECT. Esto ocurre cuando usa lo siguiente:
Cláusulas DISTINCT y UNION con memos y la cláusula GROUP BY
La cláusula HAVING sin una cláusula GROUP BY
Cláusula LIKE
Cuando establece SET ENGINEBEHAVIOR en 70 u 80, los resultados de la cláusula TOP en el comando SELECT de SQL pueden incluir más de nExpr registros cuando hay filas con valores idénticos para las columnas especificadas por la cláusula ORDER BY. Por ejemplo, suponga que especificó 10 filas para nExpr. Si hay más de 10 filas con valores idénticos en las columnas especificadas en la cláusula ORDER BY, el resultado de la consulta puede contener más de 10 filas.
Cuando establece SET ENGINEBEHAVIOR en 70 u 80 y la página de códigos de la tabla (CPDBF ()) difiere de la configuración actual de la página de códigos de Visual FoxPro (CPCURRENT ()), SQL u otros comandos optimizables de Rushmore podrían regresar o actuar sobre registros incorrectos. Cuando establece SET ENGINEBEHAVIOR en 90, Visual FoxPro crea índices temporales para garantizar resultados correctos.
Vea también
Referencias
Artículo original: Microsoft SET ENGINEBEHAVIOR Command