SQL-服务器赋值给主键增量值
SQL-server assigning a value to an primary key incremental value
我有两个主键:'ID' 和 'last modified'。
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,新行。
一些条件导致插入一个新行,它引用相同的 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。
我怎样才能把它弄好??有什么想法吗?
您需要为要插入值的 table 设置标识插入,然后插入记录。
SET IDENTITY_INSERT YourTableName ON
我有两个主键:'ID' 和 'last modified'。
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,新行。
一些条件导致插入一个新行,它引用相同的 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。
我怎样才能把它弄好??有什么想法吗?
您需要为要插入值的 table 设置标识插入,然后插入记录。
SET IDENTITY_INSERT YourTableName ON