Perl 5.10 アクセス 2010
皆さん、こんにちは。
キー フィールドが正しくなく、AUTOINCREMENT が定義されているがPRIMARY KEYではないテーブルがあります。したがって、重複するキー値を持つ行は、テーブルへの道を見つけました。重複する行をプログラムで除外し、各キー値を持つ行を 1 つだけ残して、一意にする必要があります。
行がすでにソートされていると仮定すると、次のようなものが機能するはずです。
DECLARE @prevClientId = "XXX";
DECLARE @currClientId = "XXX";
DECLARE csr CURSOR FOR SELECT [Client ID] FROM [Entity Client] FOR UPDATE;
OPEN csr;
FETCH csr INTO @currClientId;
DO {
IF( @currClientId != @prevClientId) {
@prevClientId = @currClientId; ) {
} else {
DELETE FROM [Entity Client] WHERE CURRENT OF csr;
}
FETCH csr INTO @currClientId;
} UNTIL SQLSTATE = '02000';
CLOSE csr;
これにより、各行がステップスルーされ、キー値が前の行のキー値と一致する各行が削除されます。
質問: 1 - MS Access ではカーソルを使用できますか? はいの場合、これを perl スクリプトでどのようにコーディングしますか? いいえの場合、他にどのようにテーブルの各行をステップ実行できますか? すべての行がスキャンされた後、メモリ内の結果に対して作業しているため、これは $sth->fetchrow_arrayref の結果を単純にループすることと同じではありません。
Access テーブルから重複行をプログラムで削除する方法に関するその他の提案は大歓迎です。
ティア、
まだまだ勉強中のスティーブ