带复合主键的简单表。
PK1 smallint, PK2 smallint auto increment, strValue varchar(20) not null.
这有效,但PK2增量独立于PK1。
我想要的是让PK2重新开始使用新的PK1。
这是我得到的
1, 1, 1a
1, 2, 1b
2, 3, 2a
2, 4, 2b
我想要什么
1, 1, 1a
1, 2, 1b
2, 1, 2a
2, 2, 2b
我认为我需要从PK2中删除自动增量并在Insert语句中生成正确的值?这是到达那里的正确方法,您是否建议使用Insert语句的语法?自动增量PK1不是一个选项,因为它是FK关系的一部分。
假设我需要插入2,x,3b并且需要知道为x指定了什么值 不会有很多插入(如100 /天)。 PK1,strValue有一个独特的约束。
要明确我认为SQL 2008正在做正确的事情,并不是建议默认情况下SQL应该以这种方式运行。
答案 0 :(得分:0)
是的,如果你想控制PK2的增量值,你需要在插入期间生成它(例如使用ROW_NUMBER()
。没有任何其他方法可以独立设置PK2。
答案 1 :(得分:0)
如果你没有对表进行大量插入,你可以删除标识列,然后执行:
IF NOT EXISTS ( SELECT * FROM table WHERE PK1 = 2 AND strValue = '3b' )
BEGIN
DECLARE @next_PK2 INT
SELECT
@next_PK2 = ISNULL(MAX(PK2) + 1, 0) + 1
FROM
table
WHERE
PK1 = 2
INSERT table VALUES (2, @next_PK2, '3b')
END