未设置标识时获取增量ID

时间:2013-07-16 18:33:48

标签: sql-server sql-server-2008

我有一个表,其中主键列具有IDENTITY OFF。在执行INSERT时,我选择max(Cust_Id)+1并插入。

但有时会使用类似于此的查询插入多个记录:

INSERT INTO <table_1>
SELECT 
   (SELECT MAX(Cust_Id)+1 FROM <table_1>),
   CustName
FROM <TABLE2> 
WHERE Dept = 'Sales' AND Designation = 'Manager'

SELECT语句通常会选择多条记录,但所有记录都有最大ID列,例如16。

有没有办法根据行自动增加max ID列?

例如:

INSTEAD OF:

16 ........... John

16 ........... Sam

16 ........... Adam

它应该以这种方式选择:

16 ........... John

17 ........... Sam

18 ........... Adam

1 个答案:

答案 0 :(得分:1)

这是一个kludge,但它可以帮助您解决眼前的问题。但从长远来看,最好重新开启IDENTITY。

DECLARE @Seed INT
SELECT @Seed = MAX(Cust_ID) FROM <table_1>


INSERT INTO <table_1>
SELECT 
   ROW_NUMBER() OVER (ORDER BY Dept) + @Seed,
   CustName
FROM <TABLE2> 
WHERE Dept = 'Sales' AND Designation = 'Manager'

但是,如果同时执行多个实例,此代码可能会以惊人的方式破解。