簡體   English   中英

sql如何像標識列一樣插入到列中

[英]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中獲取當前最大值。

SQL Fiddle示例

如果並非總是如此, 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM