1

テーブル内の x 行の量を更新する手順があります。更新されたすべての行の記録を持つログ テーブルを作成しました。したがって、手順を実行するたびに、たとえば効果があります。5 行、これらの 5 行はログ テーブルに挿入されます。

これは私の手順です:

UPDATE dbo.ImportAdvTemp
SET dbo.ImportAdvTemp.DeliveryAdrID = dbo.ImportAdvTemp_IMPORTED.DeliveryAdrID
FROM dbo.ImportAdvTemp, dbo.ImportAdvTemp_IMPORTED
WHERE 
    ISNULL(dbo.ImportAdvTemp.DeliveryName, '') = ISNULL(dbo.ImportAdvTemp_IMPORTED.DeliveryName, '') AND
    ISNULL(dbo.ImportAdvTemp.DeliveryStreet,'') = ISNULL(dbo.ImportAdvTemp_IMPORTED.DeliveryStreet, '') AND
    ISNULL(dbo.ImportAdvTemp.DeliveryHouseNumber, '') = ISNULL(dbo.ImportAdvTemp_IMPORTED.DeliveryHouseNumber, '') AND
    ISNULL(dbo.ImportAdvTemp.DeliverySubCity, '') = ISNULL(dbo.ImportAdvTemp_IMPORTED.DeliverySubCity, '') AND
    ISNULL(dbo.ImportAdvTemp.DeliveryPostCode, '') = ISNULL(dbo.ImportAdvTemp_IMPORTED.DeliveryPostCode, '') AND
    ISNULL(dbo.ImportAdvTemp.DeliveryCity, '') = ISNULL(dbo.ImportAdvTemp_IMPORTED.DeliveryCity, '') AND
    ISNULL(dbo.ImportAdvTemp.DeliveryCountry, '') = ISNULL(dbo.ImportAdvTemp_IMPORTED.DeliveryCountry, '') AND
    ISNULL(dbo.ImportAdvTemp.DeliveryCustomer, '') = ISNULL(dbo.ImportAdvTemp_IMPORTED.DeliveryCustomer, '') AND
    ISNULL(dbo.ImportAdvTemp.DeliveryAlias, '') = ISNULL(dbo.ImportAdvTemp_IMPORTED.DeliveryAlias, '') AND
    ISNULL(dbo.ImportAdvTemp.DeliveryNote, '') = ISNULL(dbo.ImportAdvTemp_IMPORTED.DeliveryNote, '') AND
    dbo.ImportAdvTemp.toManualProc = 1 and dbo.ImportAdvTemp.Closed = 0 and(dbo.ImportAdvTemp.DeliveryAdrID IS NULL or dbo.ImportAdvTemp.PickupAdrID IS NULL or dbo.ImportAdvTemp.DeliveryAdrID = 0 or dbo.ImportAdvTemp.PickupAdrID = 0)

影響を受ける行を特定し、その行のデータを使用してログ テーブルに挿入する必要があります。カーソルの使用について読みましたが、それが唯一の方法ですか?

4

1 に答える 1

2

私はsqlserverについてあまり知りませんが、Oracleで最も簡単な解決策は、ログテーブルに挿入するUPDATEトリガーであり、sqlserverでも同じことができると確信しています。

トリガーの良いところは、実際の作業 (更新) を行うコード内で邪魔にならないことです。メインコードをいじることなくトリガーを無効にしたり変更したりできます。これはロギングの側面にのみ影響します。

補足として、行が更新される (WHERE 句に一致するため) という状況を考慮する必要があるかもしれませんが、古い値と新しい値は同じです。これをログに記録するかどうか、または適切な WHERE 句を記述してこれを防止しますか? 古い、新しい、両方の値をログに記録しますか? ログの実装に関係なく、この質問に答える必要があります。

于 2013-04-25T05:58:58.417 に答える