2

我有一个包含几列(和数千行)的表。我正在尝试使一组新的行在多个商店中工作,因此我需要复制一组行,更改一列,然后将它们重新插入到我的表中(我要更改的列是键,所以这不是一个问题)。

到目前为止,我已经达到了这一点:

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

对于每个新店,我需要为两个不同的做这个'DistinguishingValue's,我有大约十个不同的'NewShopCode's

我已经尝试('NewShopCode1', 'NewShopCode2')代替上面的单个文字插入,以及VALUES在我的SELECT声明之前使用。这些都不起作用,在每种情况下都返回语法错误。

此外,虽然在这种情况下,只为 1 和 2 执行两个单独的查询并不太麻烦DV,但如果我也可以将其合并到一个单独的查询中,那就太好了。

为了澄清起见,我知道我可以通过复制和粘贴来执行 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 回答