0

郵送日として 2013 年 9 月 1 日という単一の値があります。また、2013 年 9 月 1 日のこの単一のメール日付で更新する必要がある 50 行の主キー IDS もあります。

    UPDATE    myTable
    SET       MailingDate = CONVERT(DATETIME, '2013-09-01 00:00:00', 102)
    WHERE     (tblID = 1) OR
              (tblID = 2) OR
              (tblID = 3) OR
              (tblID = 4) OR ETC...

テーブル・トゥ・テーブルに関する質問をいくつか見たので、次の質問は次の質問になると思います。ID 列と MailDate 列を含む tempTable を作成し、更新する実際のテーブルと内部結合する必要がありますか?

WHEREステートメントを非常に大きくしたり、tempTableの方法を作成したりする必要がないこの更新を行う方法はありますか? どんな助けでも大歓迎です。

編集:これを追加するだけで、私が行った回答を選択した理由を人々がよりよく理解できるようになります.

ユーザーがアクセス フォームのデータシートから行を選択することで主キーを取得します。したがって、更新は1行から500行のどこでも更新される可能性があります(ただし、それが高くなることは疑いありませんが、そうであれば、一時テーブルの作成に行き詰まっているようです)。Therfore、私INは SQL サーバーに送信する SQL ステートメントで作成するためにループする必要があるように見えるすべての ID の vba 文字列コレクションを持っています。

4

3 に答える 3

3

50個の値で問題ないINはずです。数百または数千の値が予想される場合は、一時テーブルのような別の方法を見つける必要があります。

UPDATE    myTable
SET       MailingDate = CONVERT(DATETIME, '2013-09-01 00:00:00', 102)
WHERE     tblID IN ( 1, 2,3,...)

別のクエリの結果から ID を選択している場合は、リスト全体をサブクエリに置き換えることもできますIN

または、番号が連続している場合は、次のこともできます

UPDATE    myTable
SET       MailingDate = CONVERT(DATETIME, '2013-09-01 00:00:00', 102)
WHERE     tblID >= 1  AND tblID <= 50
于 2013-09-06T18:38:09.683 に答える
2

次のようなものを使用できます。

UPDATE    myTable
SET       MailingDate = CONVERT(DATETIME, '2013-09-01 00:00:00', 102)
WHERE     tblID IN 
(Select tblID from myTable WHERE <some condition>)

「何らかの条件」とは、どの ID を変更する必要があるかをリストする方法です。

于 2013-09-06T18:39:14.520 に答える
1

テーブル全体を更新している場合は、where 句をまとめて忘れることができます...

UPDATE    myTable
SET       MailingDate = CONVERT(DATETIME, '2013-09-01 00:00:00', 102)

照会できる特定の ID セットを更新する場合は、ID を照会して in を使用するだけです。

UPDATE    myTable
SET       MailingDate = CONVERT(DATETIME, '2013-09-01 00:00:00', 102)
WHERE     ID IN (SELECT ID
                 FROM myTable
                 WHERE <condition>)
于 2013-09-06T18:41:09.663 に答える