簡體   English   中英

SQL自動遞增具有多個插入的值

[英]SQL Auto Increment a value with multiple inserts

我們有一個針對SQL Server 2008數據庫執行的SQL查詢。

INSERT INTO ListDetail(ListID, Sequence, CompName, CompAddress, Date)
(
 SELECT
   12345 AS 'ListID',
   (MAX(ListDetail.Sequence) + 1) AUTO_INCREMENT as 'Sequence',
   Company.Name AS 'CompName',
   Company.Address AS 'CompAddress',
   GETDATE() AS 'Date'
 FROM Company
 WHERE CompanyType = 3
)

我們要從ListDetail表中找到最大序列。然后從Company表中選擇記錄到ListDetail中。 但是,我們要從ListDetail中的下一個可用Sequence值開始,然后為插入的每個記錄加1。 ListDetail中的Sequence字段只是常規的INT字段。

我們無法控制數據庫本身...因此無法創建新表或更改現有表。

一種選擇是將Row_Number()與返回max()的子查詢一起使用:

簡化解決方案:

insert into ListDetail 
select 12345, sq+row_number() over (order by (select null))
from company, (select max(sequence) sq from listdetail) t

INSERT INTO ListDetail(ListID, Sequence, CompName, CompAddress, Date)
SELECT
   12345,
   sq+row_number() over (order by (select null)),
   Name,
   Address,
   GETDATE()
FROM Company, (select max(sequence) sq from listdetail) t
WHERE CompanyType = 3

這樣的簡單方法應該適合您。

INSERT INTO ListDetail(ListID, Sequence, CompName, CompAddress, Date)
(
 SELECT
 12345,
 (SELECT MAX(Sequence) + 1 FROM ListDetail),
 Company.Name,
 Company.Address,
 GETDATE()
 FROM Company
 WHERE CompanyType = 3
)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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