我想使用一個查詢使用插入選擇來複制多個記錄。Sql插入選擇 - 具有唯一列ID的多行
Insert into tab_A(colId, col1, col2, col3)
Select colId, col1, col2, col3 form tab_A
Where colId in (2,4,6)
是否可以爲新條目分配不同的colId?例如,colid 2應該用23替換,4替換爲24,6替換爲25.我怎樣才能在單個查詢中實現它?
我想使用一個查詢使用插入選擇來複制多個記錄。Sql插入選擇 - 具有唯一列ID的多行
Insert into tab_A(colId, col1, col2, col3)
Select colId, col1, col2, col3 form tab_A
Where colId in (2,4,6)
是否可以爲新條目分配不同的colId?例如,colid 2應該用23替換,4替換爲24,6替換爲25.我怎樣才能在單個查詢中實現它?
這會工作
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
(是)標識列嗎?
編輯
這將在這個非常特殊的情況下
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)
我沒有看到在您的查詢COL4或COL6,但是這是你想要什麼:
Insert into tab_A(colId, col1, col2, col3)
Select colId, col1, 23, col3 form tab_A
Where colId in (2,4,6)
我想替換coldId值 – witpo
有你只是試圖加入disired差colId
- 在你的情況,因爲你需要由23來代替圖2,不同的是21
Insert into tab_A(colId, col1, col2, col3)
Select colId+21, col1, col2, col3
form tab_A Where colId in (2,4,6)
注:我錯過了一部分,該differnce是不共在你的情況下一直存在。
新的ID列添加到原始表,並用新值來填充它這樣做插入之前,選擇新: 如果不同的是相同
有幾個選項所提出的解決方案只會工作ID列而不是舊的。這將是我認爲的最整潔的解決方案。
可選 - 根據規則修改插入件上的ID值,例如,
INSERT INTO tab_A(colID, col1, col2, col3)
SELECT colId + 20, col1, col2, col3
FROM tab_A
WHERE colID IN(2,4,6)
最後的手段 - 按順序使用遊標處理插入,每次修改ID值。
您也可以在select中寫入大小寫。當2然後23或任何值。
您可能想要爲可能不夠流暢的用戶提供一個工作示例。 –
是否要更改名稱或值? –
我想更改值 - 用23(新行)替換2(舊行) – witpo