Cómo escribir instrucciones SQL "Passthrough" y cláusulas "Range Where" en Microsoft Great Plains Dexterity

En este artículo se describe cómo escribir instrucciones SQL de paso a través y cláusulas Range Where en Microsoft Dynamics GP Dexterity.

Se aplica a: Microsoft Dynamics GP
Número de KB original: 910129

Al escribir instrucciones SQL de paso a través y cláusulas Range Where en Dexterity, asegúrese de que el código de Transact SQL es compatible con toda la configuración regional y los pedidos de ordenación. Además, asegúrese de que los valores de campo que se pasan a Microsoft SQL Server se controlan correctamente. Puede usar los métodos siguientes:

  • 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 la Dexterity 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 sqlDate funció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 estén encapsuladas entre comillas simples. Si existe una comilla simple en la cadena, debe agregar una segunda comilla simple para detener la terminación prematura de la cadena.

  • Cuando se selecciona un intervalo entre los valores mínimo y máximo de un campo de cadena, el valor máximo que usa Dexterity puede no ser 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 Relleno de destreza, el programa rellena el campo usando 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). Algunos criterios de ordenación de SQL tratan este carácter como Y. Significa que el final del intervalo se establece en Y en MSSQL y que todo lo que comienza con el carácter Z no se incluye en el intervalo. El siguiente código de destreza es un ejemplo que usa el system 9600 comando para obtener el valor máximo de caracteres 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');