2011-10-06 96 views
0

我有一个sql语句,它是将两个值插入表(值表示字段)的例程插入。这些是ints/nvarchars。带有子查询的SQL插入

但是,对于表的第三个字段(可以为null),我想在表中插入最大行数+1。我该怎么做?

编辑:

表是这样的

Postcode Active ID 
NULL  1  14 
+0

我可以帮你,但请写下一个数据样本:T1,T2和T3。 – danihp

+1

这听起来像是一个“自己动手”的身份领域,这是一个**糟糕的想法** – JNK

+0

@JNK也许他想存储行数(这不一定与最大身份值相同)在插入时。 –

回答

1

该代码向您展示了如何完成这项工作,以及如果您需要将ID作为表中的唯一值,可以解决哪些问题。还有更多的情况下,你可能会重复。一个是两个用户同时向表中添加行。

declare @T table(Postcode varchar(5), Active bit, ID bigint) 

insert into @T (Postcode, Active, ID) 
select '1111', 1, count(*)+1 
from @T 

insert into @T (Postcode, Active, ID) 
select '2222', 0, count(*)+1 
from @T 

delete from @T where Postcode = '1111' 

insert into @T (Postcode, Active, ID) 
select '3333', 0, count(*)+1 
from @T 

select * 
from @T 

结果:

Postcode Active ID 
-------- ------ -------------------- 
3333  0  2 
2222  0  2 

如果您需要的值是唯一的,你应该使用identity柱代替。也许甚至可以把它作为主键,或者至少在ID列上添加一个唯一的约束。

0

我假设你正在使用SQL Server的工作,因为你还没有另外规定。

INSERT INTO Table_1 (col1, col2, col3) 
     VALUES (15, 'info', 1 + (SELECT COUNT(*) FROM Table_1)) 

您应该知道这会增加插入操作的费用。