Problemas al convertir procesos almacenados de Visual FoxPro a MS SQL Server equivalente

Estamos teniendo algunos problemas serios al migrar Visual FoxPro a SQL Server.

No sé mucho sobre FoxPro. Cualquier persona que haya realizado esta migración podría ayudarme con mi pregunta a continuación.

¿Cómo escribo una declaración SQL equivalente para SET ENGINEBEHAVIOR 70 (SET ENGINEBEHAVIOR 80) encontrado en FoxPro.. ¿Cuál es el propósito de SET ENGINEBEHAVIOR ¿en absoluto? Leí en algún lugar que es enumerar todos los campos que no forman parte de funciones agregadas ni agrupan por cláusula.

¡Cualquier ayuda es muy apreciada!

preguntado el 12 de junio de 12 a las 17:06

2 Respuestas

Creo que es una declaración de compatibilidad dentro de FOXPro... ¿un script de informe contiene esa declaración? No debería ser necesario si ahora está ejecutando directamente en un servidor SQL... Creo que es principalmente para formatear Foxpro.

La información completa de MSDN está aquí: http://msdn.microsoft.com/en-us/library/aa978316(v=vs.71).asp

Editar para agregar: en realidad parece afectar el comportamiento de agrupación. Desde el enlace:

Puede incluir una función agregada en la lista SELECT sin tenerla en la cláusula GROUP BY. Por ejemplo, el código siguiente utiliza la función COUNT( ) en la empresa de campo sin tener la empresa de campo en la cláusula GROUP BY. SELECCIONE CONTEO (empresa), país DEL GRUPO de clientes POR país

Si está saliendo de FoxPro, creo que ya no se requiere esta declaración.

Respondido el 12 de junio de 12 a las 17:06

Wow... ¡esa fue una respuesta muy rápida! Entonces, ¿quiere decir que puedo ignorar el comando SET ENGINEBEHAVIOR y continuar reescribiendo las otras declaraciones de foxpro? ¡Muchas gracias por la ayuda Jon! - roca

El duodécimo es preciso sobre cómo opera SET ENGINE BEHAVIOR. Solo tenga en cuenta que no todas las bases de datos SQL admiten esta función y REQUIEREN que ingrese todas las columnas no agregadas cada vez que realiza una consulta SQL.

Supongamos que tiene 10 registros para un cliente en una tabla de pedidos y desea contar los pedidos, pero la tabla también tiene una fecha de pedido, un monto total, una dirección para entregar, etc. La persona tiene los diferentes pedidos entregados en diferentes ubicaciones. .. Haciendo

select customerID, count(*) as NumberOfOrders, DeliverAddress, TotalOrder
   from orders 
   group by CustomerID

algunos motores de SQL le molestarán por no tener "DeliverAddress" o "TotalOrder" como parte del grupo. En VFP, estas columnas solo devolverán el primer registro encontrado para el cliente, independientemente de cuántos registros se hayan encontrado.

Creo que MySQL también admite este comportamiento de NO REQUERIR las columnas "no agregadas".

Respondido el 12 de junio de 12 a las 20:06

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.