2014-04-01 62 views
1

我們正在對SQL Server 2008數據庫執行SQL查詢。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表中找到最大序列並從公司表中選擇記錄到ListDetail中。但是,我們希望從ListDetail中的下一個可用序列值開始,然後爲插入的每條記錄加1。 ListDetail中的Sequence域只是一個通用的INT域。

我們無法控制數據庫的自身...所以創建一個新表或者更改現有的表不是一個選項。

回答

1

一種選擇是使用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 
+0

這工作很好,謝謝! – adam

0

這種簡單的方法應該適合你。

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 
) 
+2

我不認爲這會產生正確的結果(儘管我可以看出它應該是有意義的)。看看這個小提琴:http://sqlfiddle.com/#!3/d8ed9/1 – sgeddes

+0

同意,這似乎是有道理的,但我實際上嘗試過這一點,它沒有奏效。 – adam