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 res

HAVING

Un comando SELECTDISTINCTHAVING 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

Tema principal Comandos Set

 


 

Referencias

Artículo original: Microsoft SET ENGINEBEHAVIOR Command

 


 

 

 



error: Contenido protegido