[英]sql how to insert into a column like it was an identity column
我有一張三列的桌子
KeyID | nvarchar(10) ColumnA | nvarchar(max) ColumnB | Nvarchar(max)
我想做的是選擇插入,但是使用keyID時,我需要將其視為一個indentity列。
例如,如果我有3行,我想插入:
1001 | Apple | Pear 1002 | Pear | Mango 1003 | Pineapple | Pine
但是我試圖通過插入選擇來做到這一點,例如:
insert into myTable(KeyId,ColumnA,ColumnB) select 'x',OrigColA,OrigColB from myTableB
顯然“ x”是我遇到問題的地方。
提前致謝!
這不是位於myTableB中的KeyId
由於varchar,這有點難看,但是您可以嘗試:
;WITH x AS
(
SELECT ROW_NUMBER() OVER(ORDER BY OrigColA, OrigColB) AS n, OrigColA, OrigColB
FROM myTableB
)
INSERT INTO myTable(KeyId, ColumnA, ColumnB)
SELECT (SELECT CAST(CAST(MAX(KeyId) AS INT) + n AS NVARCHAR(10)) FROM myTable),
OrigColA, OrigColB
FROM x;
當然,這假設myTable
已經存在一行myTable
中獲取當前最大值。
如果並非總是如此, MAX(KeyId)
COALESCE
,並將常量比起始默認值小1。 例如:
;WITH x AS
(
SELECT ROW_NUMBER() OVER(ORDER BY OrigColA, OrigColB) AS n, OrigColA, OrigColB
FROM myTableB
)
INSERT INTO myTable(KeyId, ColumnA, ColumnB)
SELECT (SELECT CAST(CAST(COALESCE(MAX(KeyId),1000) AS INT) + n AS NVARCHAR(10)) FROM myTable),
OrigColA, OrigColB
FROM x;
或者,如果您知道沒有一行,而只想從一個常數開始,則執行以下操作:
INSERT INTO myTable(KeyId, ColumnA, ColumnB)
SELECT ROW_NUMBER() OVER(ORDER BY OrigColA, OrigColB) + 1000, OrigColA, OrigColB
FROM myTableB
您需要一個帶有序列的數據庫。 這是SQL Server的解決方法
http://www.sqlteam.com/article/custom-auto-generation-sequences-with-sql-server
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.