Comment écrire des instructions SQL « Passthrough » et des clauses « Range Where » dans Microsoft Great Plains Dexterity
Cet article explique comment écrire des instructions SQL passthrough et des clauses Range Where dans Microsoft Dynamics GP Dexterity.
S’applique à : Microsoft Dynamics GP
Numéro de la base de connaissances d’origine : 910129
Lorsque vous écrivez des instructions SQL passthrough et des clauses Range Where dans Dexterity, assurez-vous que le code Transact SQL est compatible avec tous les paramètres régionaux et les ordres de tri. Assurez-vous également que les valeurs de champ passées à Microsoft SQL Server sont gérées correctement. Vous pouvez utiliser les méthodes suivantes :
Si vous souhaitez passer une valeur de date à Microsoft SQL Server, utilisez la
Dexterity sqlDate()
fonction globale pour vous assurer que la date est au format AAAAMMJJ. Si vous utilisez laDexterity str()
fonction , le programme utilise le format MM/JJ/AAAA ou le format JJ/MM/AAAA, en fonction des paramètres régionaux. SQL Server n’accepte pas le format JJ/MM/AAAA, car ce format peut entraîner des erreurs intermittentes qui se produisent après le 12e jour de chaque mois.Remarque
La
sqlDate
fonction n’ajoute pas les guillemets simples requis lorsque vous transmettez la date à SQL Server. Par conséquent, placez le résultat de la fonction entre guillemets simples.Si vous souhaitez passer une valeur de chaîne à SQL Server, utilisez la
Dexterity SQL_FormatStrings()
fonction globale pour vous assurer que les chaînes sont encapsulées entre guillemets simples. S’il existe un seul guillemet dans la chaîne, vous devez ajouter un deuxième guillemet simple pour arrêter l’arrêt prématuré de la chaîne.Lorsqu’une plage est sélectionnée entre les valeurs minimale et maximale d’un champ de chaîne, la valeur maximale utilisée par Dexterity peut ne pas être la valeur maximale correcte pour SQL Server. La valeur maximale correcte pour SQL Server dépend de l’ordre de tri et du classement des instance de SQL Server. À l’aide de la commande Dexterity fill, le programme remplit le champ en utilisant ASCII 255 pour la longueur de la chaîne. Toutefois, selon l’ordre de tri, ASCII 255 peut ne pas être la valeur la plus élevée. Par conséquent, la clause where ne retourne aucun résultat. La valeur maximale pour ASCII 255 est ]. (y en minuscules avec umlaut). Ce caractère est traité comme un Y par certains ordres de tri SQL. Cela signifie que la fin de la plage est définie sur Y dans MSSQL et que tout ce qui commence par le caractère Z n’est pas inclus dans la plage. Le code Dexterity suivant est un exemple qui utilise la
system 9600
commande pour obtenir la valeur de caractère maximale pour l’ordre de tri d’un système. Le code utilise ensuite cette valeur pour générer une clause 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');
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour