Como escrever instruções SQL "Passthrough" e cláusulas "Range Where" no Microsoft Great Plains Dexterity

Este artigo descreve como escrever instruções SQL de passagem e cláusulas Range Where no Microsoft Dynamics GP Dexterity.

Aplica-se a: Microsoft Dynamics GP
Número de KB original: 910129

Ao escrever instruções SQL de passagem e cláusulas Range Where no Dexterity, verifique se o código SQL do Transact é compatível com todas as configurações regionais e ordens de classificação. Além disso, verifique se os valores de campo que são passados para a Microsoft SQL Server são tratados corretamente. Você pode usar os seguintes métodos:

  • Se você quiser passar um valor de data para a Microsoft SQL Server, use a Dexterity sqlDate() função global para garantir que a data esteja no formato YYYYYMMDD. Se você usar a Dexterity str() função, o programa usará o formato MM/DD/YYYY ou o formato DD/MM/YYYYY, dependendo das configurações regionais. SQL Server não aceita o formato DD/MM/YYYYY porque esse formato pode causar erros intermitentes que ocorrem após o 12º dia de cada mês.

    Observação

    A sqlDate função não adiciona as aspas individuais necessárias quando você passa a data para SQL Server. Portanto, inclua o resultado da função usando aspas individuais.

  • Se você quiser passar um valor de cadeia de caracteres para SQL Server, use a função global para garantir que as Dexterity SQL_FormatStrings() cadeias de caracteres estejam envoltas em aspas individuais. Se existir uma única marca de cotação na cadeia de caracteres, você deverá adicionar uma segunda marca de cotação única para interromper o término prematuro da cadeia de caracteres.

  • Quando um intervalo é selecionado entre os valores mínimo e máximo em um campo de cadeia de caracteres, o valor máximo usado pela Dexterity pode não ser o valor máximo correto para SQL Server. O valor máximo correto para SQL Server depende da ordem de classificação e da ordenação da instância de SQL Server. Usando o comando Destreza de preenchimento, o programa preenche o campo usando ASCII 255 para o comprimento da cadeia de caracteres. No entanto, dependendo da ordem de classificação, o ASCII 255 pode não ser o valor mais alto. Portanto, a cláusula em que não retornará nenhum resultado. O valor máximo para ASCII 255 é ÿ (minúscula y com umlaut). Esse caractere é tratado como um Y por alguns pedidos de classificação SQL. Isso significa que o final do intervalo está definido como Y no MSSQL e que tudo o que começa com o caractere Z não está incluído no intervalo. O código Destreza a seguir é um exemplo que usa o system 9600 comando para obter o valor máximo de caractere para a ordem de classificação de um sistema. Em seguida, o código usa esse valor para criar uma cláusula em que.

    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');