Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En este artículo se describe cómo escribir instrucciones SQL de paso a través y cláusulas Range Where en Dexterity de Microsoft Dynamics GP.
Se aplica a: Microsoft Dynamics GP
Número de KB original: 910129
Al escribir instrucciones SQL de paso a través y cláusulas WHERE de rango en Dexterity, asegúrese de que el código de Transact SQL sea compatible con todas las configuraciones regionales y los órdenes de clasificación. Además, asegúrese de que los valores de campo que se pasan a Microsoft SQL Server se controlan correctamente. Puede usar los siguientes métodos:
Si desea pasar un valor de fecha a Microsoft SQL Server, use la
Dexterity sqlDate()función global para asegurarse de que la fecha está en formato AAAAMMDD. Si usa laDexterity str()función , el programa usa el formato MM/DD/AAAA o el formato DD/MM/AAAA, dependiendo de la configuración regional. SQL Server no acepta el formato DD/MM/AAAA porque este formato puede provocar errores intermitentes que se producen después del día 12 de cada mes.Nota:
La
sqlDatefunción no agrega las comillas simples necesarias al pasar la fecha a SQL Server. Por lo tanto, incluya el resultado de la función mediante comillas simples.Si desea pasar un valor de cadena a SQL Server, use la
Dexterity SQL_FormatStrings()función global para asegurarse de que las cadenas se encapsulan entre comillas simples. Si existe una comilla única en la cadena, debe agregar una segunda comilla única para detener la terminación prematura de la cadena.Cuando se selecciona un intervalo entre los valores mínimo y máximo en un campo de cadena, es posible que el valor máximo que use Dexterity no sea el valor máximo correcto para SQL Server. El valor máximo correcto para SQL Server depende del criterio de ordenación y de la intercalación de la instancia de SQL Server. Mediante el comando Dexterity fill, el programa rellena el campo mediante ASCII 255 para la longitud de la cadena. Sin embargo, dependiendo del criterio de ordenación, ASCII 255 puede no ser el valor más alto. Por lo tanto, la cláusula where no devolverá ningún resultado. El valor máximo de ASCII 255 es ø (minúscula y con umlaut). Este carácter se trata como una Y según algunos criterios de ordenación de SQL. Significa que el final del intervalo se establece en Y en MSSQL y que todo lo que comience con el carácter Z no se incluya en el intervalo. El siguiente código de dexteridad es un ejemplo que usa el
system 9600comando para obtener el valor máximo de carácter para el criterio de ordenación de un sistema. A continuación, el código usa este valor para compilar una cláusula where.local string l_MaxChar; local integerl_Result,l_Length; system 9600, table SOP_HDR_WORK, l_MaxChar, l_Result; if empty('End Location Code') or filled('End Location Code') then fill 'End Location Code'; l_Length = length('End Location Code'); clear 'End Location Code'; 'End Location Code' = pad('End Location Code', TRAILING, l_MaxChar, l_Length); end if; range table SOP_HDR_WORK where physicalname('Location Code' of table SOP_HDR_WORK) + CH_SPACE + CH_GREATERTHAN + CH_EQUAL + CH_SPACE + SQL_FormatStrings('Start Location Code') + CH_SPACE + SQL_AND + CH_SPACE + physicalname('Location Code' of table SOP_HDR_WORK) + CH_SPACE + CH_LESSTHAN + CH_EQUAL + CH_SPACE + SQL_FormatStrings('End Location Code');