2016-11-12 81 views
1

如果條件爲真,我試圖向表中插入數據。這裏是我的僞代碼:SQL Server:插入Where條件爲True

INSERT INTO Table1 (BatchStart, BatchId, FermNum,SiteId) 
VALUES (11/11/2016,7280,1,6) 
WHERE BatchId > (SELECT TOP 1 BatchId 
       FROM Table1 
       ORDER BY BatchStart DESC); 

我不能有變量,它必須是一個普通的插入語句。有沒有辦法做到這一點?

+0

使用'select'而不是'values',爲列添加名稱,它應該工作;在這種情況下,插入0行或1行。 – cco

+0

你爲什麼要檢查'batchId'是否比所有其他的都沒有?你只需要一個獨特的價值,應該由一個獨特的密鑰強制執行的東西?你需要一個沒有差距的序列(注意 - 這是**真的很少見)? 'batchId's必須有一個匹配'batchStart'的訂單嗎? –

回答

1

這在sql server上有效。

INSERT INTO Table1 (BatchStart, BatchId, FermNum,SiteId) 
select '2016-11-11',7280,1,6 
where 7280 > (select top 1 batch_id 
       FROM Table1 
       ORDER BY BatchStart DESC) 
0

嘗試以下查詢

INSERT INTO Table1 (BatchStart, BatchId, FermNum,SiteId) 
SELECT '20161111',MAX(BTACHID) +1 ,1,6 From Table1 

有很多種方式接入數據。請閱讀article以獲取更多信息

+0

'MAX(someColumn)+ 1'通常是一個可怕的想法,因爲它需要鎖定整個表來處理併發寫入。根據你持有這樣一把鎖的時間長短,它可能會很糟糕(或者不像以前那樣結束)。目前還不清楚OP是否也需要無間隙序列。 –

-1

您可以使用SELECT獲取所有必要的數據,然後插入表中。

INSERT INTO Table1 (BatchStart, BatchId, FermNum,SiteId) 
SELECT '11-11-2016','7280','1','6' 
WHERE BatchId > (SELECT TOP 1 BatchId 
       FROM Table1 
       ORDER BY BatchStart DESC);