我有两个主键:' ID'并且'最后修改了'。
ID是一个增量的标识,也就是说,当我添加一个新行时,它将是:
ID | last modified |value1|value2|value3|...|value_n|
-- |---------------------------|------|------|------|---|-------|
1 | 2011-10-01 13:03:00.000 |................................|
2 | 2011-10-01 14:03:00.000 |................................|
我在不同的表中添加了这些新行,所以我想在某些条件下更新行,而且,我想添加引用相同ID的新行。我举一个例子:
ID = 1,新行。 ID = 2,新行。</ p>
某些条件会导致插入一个新行,该行引用相同的ID(ID = 2),也会更改上次修改的日期时间。
ID | last modified |value1 |value2|value3|...|value_n|
-- |---------------------------|------ |------|------|---|-------|
1 | 2011-10-01 13:03:00.000 |................................ |
2 | 2011-10-01 14:03:00.000 |old value..|..................... |
2 | 2011-10-01 15:03:00.000 |other value|.........................|
之后某些条件导致更新一行(指特定ID,在本例中为ID = 2),它将花费最后修改时间,并更新它,并且还更新上次修改日期时间:
ID | last modified |value1 |value2|value3|...|value_n|
-- |---------------------------|---------|------|------|---|-------|
1 | 2011-10-01 13:03:00.000 |................................ |
2 | 2011-10-01 14:03:00.000 |................................ |
2 | 2011-10-01 16:03:00.000 |new value|.........................|
但是,当我添加一个新行时,即使我将相同的ID分配给ID列,它也会忽略分配,并且它正在增加ID,如下所示:
ID | last modified |value1 |value2|value3|...|value_n|
-- |---------------------------|---------|------|------|---|-------|
1 | 2011-10-01 13:03:00.000 |................................ |
2 | 2011-10-01 14:03:00.000 |................................ |
3 | 2011-10-01 16:03:00.000 |.........|.........................|
我附上了代码:
IF (SELECT COUNT(*) FROM myTable WHERE myColumn = @myValue ) = 0
--change value
BEGIN
INSERT INTO myTable(ID, value1,value2...) VALUES (@ID, value1,value2..)
END
然而,正如我所说,分配(ID = @ID)实际上并不是因为PK是一个自动增量值和PK。
我怎样才能做对?任何想法?
答案 0 :(得分:1)
您需要为要插入值的表设置标识插入,然后插入记录。
SET IDENTITY_INSERT YourTableName ON