Microsoft Great Plains Dexterity'de "Passthrough" SQL deyimlerini ve "Range Where" yan tümcelerini yazma

Bu makalede, Microsoft Dynamics GP Dexterity'de Geçiş SQL deyimlerinin ve Range Where yan tümcelerinin nasıl yazıldığı açıklanmaktadır.

Şunlar için geçerlidir: Microsoft Dynamics GP
Özgün KB numarası: 910129

Dexterity'de Passthrough SQL deyimleri ve Range Where yan tümceleri yazdığınızda Transact SQL kodunun tüm bölgesel ayarlar ve sıralama düzenleriyle uyumlu olduğundan emin olun. Ayrıca, Microsoft SQL Server geçirilen alan değerlerinin doğru işlenmiş olduğundan emin olun. Aşağıdaki yöntemleri kullanabilirsiniz:

  • Microsoft SQL Server'a bir tarih değeri geçirmek istiyorsanız, tarihin Dexterity sqlDate() YYYYMMDD biçiminde olduğundan emin olmak için genel işlevi kullanın. işlevini kullanırsanız Dexterity str() , program bölgesel ayarlara bağlı olarak AA/GG/YYYY biçimini veya DD/AA/YYYY biçimini kullanır. SQL Server DD/AA/YYYY biçimini kabul etmez çünkü bu biçim her ayın 12. gününden sonra oluşan aralıklı hatalara neden olabilir.

    Not

    İşlev, sqlDate tarihi SQL Server geçirdiğinizde gereken tek tırnak işaretlerini eklemez. Bu nedenle, tek tırnak işaretlerini kullanarak işlevin sonucunu içine alın.

  • SQL Server bir dize değeri geçirmek istiyorsanız, dizelerin Dexterity SQL_FormatStrings() tek tırnak içine sarmalandığından emin olmak için genel işlevi kullanın. Dizede tek bir tırnak işareti varsa, dizenin erken sonlandırmasını durdurmak için ikinci bir tek tırnak işareti eklemeniz gerekir.

  • Bir dize alanındaki en düşük ve en yüksek değerler arasında bir aralık seçildiğinde, Dexterity tarafından kullanılan maksimum değer SQL Server için doğru maksimum değer olmayabilir. SQL Server için doğru maksimum değer sıralama düzenine ve SQL Server örneğinin harmanlama düzenine bağlıdır. Dexterity fill komutunu kullanarak, program dizenin uzunluğu için ASCII 255 kullanarak alanı doldurur. Ancak sıralama düzenine bağlı olarak ASCII 255 en yüksek değer olmayabilir. Bu nedenle where yan tümcesi hiçbir sonuç döndürmez. ASCII 255 için en büyük değer ÿ 'dir (umlaut ile küçük harf y). Bu karakter, bazı SQL sıralama düzenleri tarafından Y olarak değerlendirilir. Bu, aralığın sonunun MSSQL'de Y olarak ayarlandığı ve Z karakteriyle başlayan hiçbir şeyin aralığa dahil olmadığı anlamına gelir. Aşağıdaki Dexterity kodu, bir sistemin sıralama düzeni için en yüksek karakter değerini elde etmek için komutunu kullanan system 9600 bir örnektir. Kod daha sonra where yan tümcesi oluşturmak için bu değeri kullanır.

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