我正在尝试使用insert select from使用一个查询复制多条记录。
Insert into tab_A(colId, col1, col2, col3)
Select colId, col1, col2, col3 form tab_A
Where colId in ( 2,4,6)是否可以为新条目分配不同的colId?例如,大肠杆菌2应替换为23,4应替换为24,6应替换为25。我如何在一个查询中实现它?
发布于 2012-07-05 16:24:20
这将会起作用
Insert into tab_A(colId, col1, col2, col3)
Select 23 , col1, col2, col3 form tab_A Where colId = 2 UNION ALL
Select 24 , col1, col2, col3 form tab_A Where colId = 4 UNION ALL
Select 25 , col1, col2, col3 form tab_A Where colId = 6 如果你提供更多的信息,我可以提供一些更可重用的东西。colId (be)是否应该是标识列?
编辑
这在这种非常特殊的情况下是可行的。
Insert into tab_A(colId, col1, col2, col3)
Select ((colId - 4) * (-1)) + colId + 20 , col1, col2, col3
form tab_A Where colId IN (2, 4, 6)函数newId = ((oldId - 4) * (-1)) + oldId + 20显然是特定于所述问题的。
EDIT2
我怀疑像这样的更通用的方法是合适的。
DECLARE @MaxColID INT
BEGIN TRANSACTION
SELECT @MaxColID = MAX(ColID) FROM tab_A
INSERT tab_A(colId, col1, col2, col3)
SELECT row + @MaxColID, col1, col2, col3
FROM
(
SELECT ROW_NUMBER() OVER (ORDER BY ColID) row, col1, col2, col3
FROM tab_A WHERE colID IN (2, 4, 6)
)
COMMIT编辑3个
如果您认为EDIT 2实际上是您想要的,那么您真的想让ColID成为IDENTITY列,那么您可以这样做。
INSERT tab_A (col1, col2, col3)
SELECT col1, col2, col3 FROM tab_A WHERE colId IN (2, 4, 6)发布于 2012-07-05 16:24:27
我在您的查询中没有看到col4或col6,但这是您想要的吗:
Insert into tab_A(colId, col1, col2, col3)
Select colId, col1, 23, col3 form tab_A
Where colId in ( 2,4,6)发布于 2012-07-05 16:43:01
您是否刚刚尝试向colId添加disired差-在您的示例中,由于您需要将2替换为23,因此差是21。
Insert into tab_A(colId, col1, col2, col3)
Select colId+21, col1, col2, col3
form tab_A Where colId in ( 2,4,6) 注:我错过了这一部分,在你的情况下,差异是不一致的。建议的解决方案只有在差异相同的情况下才有效。
https://stackoverflow.com/questions/11340354
复制相似问题