0

別のデータベースに挿入する必要があるレコードを格納するテーブルがあります。これらの値が挿入されたら、再処理されないように、これらのレコードを処理済みとしてマークする必要があります。

DECLARE @InsertedValues TABLE (
    [ITEMNMBR] nchar(31),
    [ITEMDESC] nchar(101),
    [ITMSHNAM] nchar(15),
    [ITMGEDSC] nchar(11),
    [UOMSCHDL] nchar(11),
    [ALTITEM1] nchar(31),
    [ALTITEM2] nchar(31),
    [USCATVLS_1] nchar(11),
    [USCATVLS_2] nchar(11),
    [USCATVLS_3] nchar(11),
    [USCATVLS_6] nchar(11),
    [ABCCODE] int,
    [ROW_ID] int
)

-- INSERT NEW INVENTORY ITEMS INTO DB
INSERT INTO TABLE1..IV00101 (ITEMNMBR,ITEMDESC,ITMSHNAM,ITMGEDSC,UOMSCHDL,ALTITEM1,ALTITEM2,USCATVLS_1,USCATVLS_2,USCATVLS_3,USCATVLS_6,ABCCODE)
OUTPUT          
    INSERTED.[ITEMNMBR],
    INSERTED.[ITEMDESC],
    INSERTED.[ITMSHNAM],
    INSERTED.[ITMGEDSC],
    INSERTED.[UOMSCHDL],
    INSERTED.[ALTITEM1],
    INSERTED.[ALTITEM2],
    INSERTED.[USCATVLS_1],
    INSERTED.[USCATVLS_2],
    INSERTED.[USCATVLS_3],
    INSERTED.[USCATVLS_6],
    INSERTED.[ABCCODE],
    U.[ROW_ID] INTO @InsertedValues
SELECT U.[ITEMNMBR],U.[ITEMDESC],U.[ITMSHNAM],U.[ITMGEDSC],U.[UOMSCHDL],U.[ALTITEM1],U.[ALTITEM2],U.[USCATVLS_1],U.[USCATVLS_2],U.[USCATVLS_3],U.[USCATVLS_6],U.[ABCCODE]
FROM 
    DYNAMICS..TABLE2 AS U
WHERE 
    U.[ProcessedFlag] = 0 AND 
    U.[Action] = 'I' AND 
    U.[DestinationCompany] = 'COMPANY1' AND
    U.[DestinationTable] = 'IV00101'

現状では、このクエリは、意味のある OUTPUT ステートメントの U.[ROW_ID] 列について不平を言うため、機能しません。だから私の問題は、次のクエリを実行できるように、挿入された行を取得するにはどうすればよいですか?

UPDATE DYNAMICS..TABLE2
SET [ProcessedFlag] = 1, [ProcessedDateTime] = GETDATE()
FROM @InsertedValues AS U
    INNER JOIN DYNAMICS..TABLE2 AS R ON U.[ROW_ID] = R.[ROW_ID]
4

4 に答える 4

0
UPDATE DYNAMICS..TABLE2
SET [ProcessedFlag] = 1, [ProcessedDateTime] = GETDATE()
WHERE
    DYNAMICS..TABLE2.[ProcessedFlag] = 0 AND 
    DYNAMICS..TABLE2.[Action] = 'I' AND 
    DYNAMICS..TABLE2.[DestinationCompany] = 'COMPANY1' AND
    DYNAMICS..TABLE2.[DestinationTable] = 'IV00101'

最初に選択したのと同じレコードのセットを更新するだけです。

于 2012-08-06T22:02:47.820 に答える
0

GPテーブルをいじるのは良い考えではないので、eConnectの使用を検討します(ただし、IV00101は在庫マスターなので、IV00101に挿入しても問題ありませんが...それでも!)

どのバージョンの GP を使用していますか? GP10 および GP2010 は、インベントリ アイテムを挿入できるメソッドを持つ Web サービスをサポートします。それ以外の場合は、eConnect を使用して、処理する eConnect エントリポイントに XML ファイルを提供できます。また、検証とエラー処理も提供します。必要に応じてメッセージキューイングも使用できます

自分の保持テーブルから GP テーブルなどにインポートしようとしていますか?

私は自分が働いている場所で多くの GP と統合を行っています :)

于 2012-08-06T22:07:22.740 に答える
0

標準 SQL で更新された行数を取得することはできませんが、おそらくどのデータベースでも取得できます。どの RDBMS を使用しているか、どこから SQL 命令を呼び出しているかを知らなければ、簡単には役に立ちません。私は、どのdbクライアントアプリケーションまたはT-SQL、PL-SQL、pgplsql、java、PHP、c/c++、c#、VB、またはおそらくdbを使用して、あなたが言うべき言語で開発しているアプリケーションで実行されるスクリプトを意味します-library とも言うべきです。

于 2012-08-06T20:56:01.217 に答える
0

ただの提案です。同様の種類のシナリオがある場合は、ID 列を使用する必要があります。その後の使用は @@IDENTITY/SCOPE_IDENTITY()かなり簡単になるので。とにかく、トリガーにはいくつかの欠点があるため、このテーブルに同時に複数の挿入がない場合は、トリガーを使用することをお勧めします。

于 2012-08-07T03:20:19.040 に答える