2016-11-12 88 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);