0

我有一个表,其中主键列的 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。

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

例如:

代替:

16…………约翰

16…………山姆

16…………亚当

它应该以这种方式选择:

16…………约翰

17 ...... 山姆

18 ...... 亚当

4

1 回答 1

1

这是一个杂牌,但它可以帮助您解决眼前的问题。不过,从长远来看,最好重新打开 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'

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

于 2013-07-16T18:52:34.870 回答