我有一个表,其中主键列具有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
答案 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'
但是,如果同时执行多个实例,此代码可能会以惊人的方式破解。