SQL服务器将值分配给主键增量值

时间:2016-05-19 11:47:46

标签: sql sql-server primary-key identity

我有两个主键:' 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。

我怎样才能做对?任何想法?

1 个答案:

答案 0 :(得分:1)

您需要为要插入值的表设置标识插入,然后插入记录。

SET IDENTITY_INSERT YourTableName ON