我有一个包含多个列(以及数千行)的表。我试图在一些商店上创建一组新的行,所以我需要复制一组行,更改一列,然后将它们重新插入到我的表中(我正在更改的列是一个键,所以这不是一个问题)。
到目前为止,我已经到了这一步:
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,单个查询=更少的电话呼叫抱怨没有人的数据库工作,因为它没有正确更新。
提前感谢您的考虑。
答案 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)
)
在插入之前,单独尝试选择以查看它是否产生了正确的结果。