未设置“标识”时获取递增的ID



我有一个表,其中主键列的IDENTITY为OFF。在执行INSERT时,我选择最大值(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。

有没有任何方法可以根据行自动增加最大ID列?

例如:

代替:

16。。。。。。。。。。。约翰·

16。。。。。。。。。。。Sam

16。。。。。。。。。。。Adam

它应该这样选择:

16。。。。。。。。。。。约翰·

17。。。。。。。。。。。Sam

18。。。。。。。。。。。Adam

这是一个拼凑的过程,但它可能会帮助您解决眼前的问题。不过,从长远来看,最好重新开启身份识别

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'

然而,如果同时执行多个实例,则此代码可能会以惊人的方式崩溃。

最新更新