0

現在、テーブルでトリガーを使用して、最後の行を WHERE 条件と ORDER BY に基づいて指定されたテーブルにコピーしています。1 つのトリガーを使用すると問題なく動作し、それぞれのテーブルにコピーされます。しかし、両方のトリガーが実行されているため、挿入したくないテーブルに前の行の重複が表示されます。(SQL2008 Management Studio)。部品番号に基づいて、この行も送信するための特定のテーブルがあります。構造は次のとおりです。

ALTER TRIGGER NewT3650 ON JD_Passdata
FOR INSERT 
AS
INSERT T3_650_TestData (SerialNumber, Partnumber, etc)
SELECT TOP 1 SerialNumber, Partnumber, etc
FROM JD_Passdata
WHERE partnumber = 'T3_650'
ORDER BY passdata_ndx DESC

ALTER TRIGGER NewT4450 ON JD_Passdata
FOR INSERT 
AS
INSERT T4_450_TestData (SerialNumber, Partnumber, etc)
SELECT TOP 1 SerialNumber, Partnumber, etc
FROM JD_Passdata
WHERE partnumber = 'T4_450'
ORDER BY passdata_ndx DESC

元の PassData テーブル:

201244999, T4_450
201245001, T3_650
201245002, T3_650
201245003, T3_650

テーブル 1 の結果を返します

201245001, T3_650
201245002, T3_650
201245003, T3_650

テーブル 2 の結果を返します

201244999, T4_450
201244999, T4_450
201244999, T4_450

これを、最後の行のみを取得して正しいテーブルに入力し、可能であれば追加のトリガーを削除する OR 条件または UNION にしたいと考えています。それ以外の場合は、重複と更新のチェックも行われる可能性があります。また、データベースは非常に大きくなり、すべてのエントリが遅くなる可能性があります。order by を削除する方法も考慮に入れます。

どんな提案でも大歓迎です... THX

4

1 に答える 1

0

両方のトリガーで機能する解決策がありますが、「NULL」結果が発生したときに問題が発生する可能性があります。ORDER BY が取り除かれ、より高速になる可能性があります。これが行うことは、一意の最後の行インデックス番号を行の場所として使用し、部品番号をチェックして新しいテーブルへの挿入を決定することです。また、別のテーブルに同じ形式を使用して 3 番目のトリガーを追加すると、メイン テーブル (JD_PassData) への最初の移動が失敗します。理由はまだわかりません。

新しいコードは次のとおりです。

ALTER TRIGGER NewT3650 ON JD_Passdata ON T3_650_TestData (SerialNumber, Partnumber, etc) SELECT SerialNumber, Partnumber, etc FROM JD_Passdata WHERE passdata_ndx=(SELECT MAX(passdata_ndx) FROM JD_PassData) AND PartNumber = 'T3_650'

于 2012-11-09T18:11:44.443 に答える