2

いくつかの列 (および数千行) を持つテーブルがあります。新しい行セットを複数のショップで機能させようとしているので、行のグループをコピーし、1 つの列を変更してから、それらをテーブルに再挿入する必要があります (変更している列はキーなので、そうではありません問題)。

これまでのところ、私はこの点に到達しました:

INSERT INTO TableName( Column1, Column2, Column3, Column4, Column5, Column6)
(SELECT Column1, Column2, Column3, Column4, Column5, 'NewShopCode'
    FROM TableName
    WHERE Column5 = 'DistinguishingValue'

新しいショップごとに、2 つの異なる に対してこれを行う必要があり、'DistinguishingValue's約 10 の異なる があり'NewShopCode'sます。

('NewShopCode1', 'NewShopCode2')上記の単一のリテラル挿入の代わりに、ステートメントVALUESの前に使用してみました。SELECTどちらも機能せず、いずれの場合も構文エラーが返されます。

また、この場合、1 と 2 に対して 2 つの別々のクエリを実行するだけでもそれほど面倒ではありませんがDV、それも 1 つのクエリに組み込むことができればよいでしょう。

明確にするために、コピーと貼り付けを使用してクエリを10回実行するだけで、かなり高速になることを知っています。これがオフィスで使用する単なるデータベースであれば、完全に実行できます。残念ながら、これはスクリプトを作成し、ソフトウェアの次のバージョン リリースと共にすべての顧客に送信する必要がある更新です。エルゴ、単一のクエリ = 誰もデータベースが正しく更新されなかったためにどのように機能するかについて不平を言う電話が減ります。

ご検討いただきありがとうございます。

4

1 に答える 1

2

クロス結合を使用します。使用している SQL のバージョンについては言及していないので、控えめに言います。

INSERT INTO TableName( Column1, Column2, Column3, Column4, Column5, Column6)
(SELECT Column1, Column2, Column3, Column4, Column5, a.[sc]
    FROM TableName as t
    cross join (

    select 'NewShopCode1' as [sc]
    union
    select 'NewShopCode2' as [sc]
    union
    select 'NewShopCode3' as [sc]

    ) as a
    WHERE Column5 = 'DistinguishingValue'
          and not exists (select 1 from TableName as t where t.Column1 = a.Column1 and t.Column2 = a.Column2)
)

選択だけを試して、挿入する前に正しい結果が生成されることを確認してください。

于 2013-06-03T22:22:04.453 に答える