将多行插入SQL Server 2008表,从其他行复制,其中一列已更改

时间:2013-06-03 21:56:28

标签: sql-server

我有一个包含多个列(以及数千行)的表。我试图在一些商店上创建一组新的行,所以我需要复制一组行,更改一列,然后将它们重新插入到我的表中(我正在更改的列是一个键,所以这不是一个问题)。

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

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。这些都不起作用,在每种情况下都返回语法错误。

另外,虽然在这种情况下,对DV 1和2执行两个单独的查询并不是太麻烦,如果我可以将其合并到单个查询中也会很好

为了澄清,我知道我可以通过复制和粘贴进行10次查询,这将非常快,如果它只是我在办公室使用的数据库,我完全愿意。不幸的是,这是我需要编写的更新,并通过我们软件的下一个版本发送给我的所有客户; ergo,单个查询=更少的电话呼叫抱怨没有人的数据库工作,因为它没有正确更新。

提前感谢您的考虑。

1 个答案:

答案 0 :(得分: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)
)

在插入之前,单独尝试选择以查看它是否产生了正确的结果。