2016-11-12 8 views
1

条件が真である場合、テーブルにデータを挿入しようとしています。ここに私の擬似コードは次のとおりです。SQL Server:条件が真である場合に挿入します。

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

'values'の代わりに' select'を使用し、列に名前を追加してください。この場合、0行または1行のいずれかを挿入します。 – cco

+0

なぜ 'batchId'が他のものよりも_less_であるかどうかチェックしていますか?ユニークな価値が必要ですか?ユニークなキーによって強制されるべきものですか?ギャップのないシーケンスが必要ですか(メモ - これは本当に**まれです)? 'batchId'は' 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); 
関連する問題