0

我有一个包含多列的表。我正在使用 SQL Server 2008。我需要根据我从另一个表中获得的值来更改每个原始表中的一行的值。

例如,如果我的表项是:

row1    row2     row3   
kk       aa       1
bb       ss       2

我需要从另一个表中读取一个值,例如:MAX(Table_2.row9)=5,然后将表修改为:

row1    row2     row3   
kk       aa       6
bb       ss       7

我知道 IDENTITY 列,我的想法是将列作为 IDENTITY,然后有一个类似的代码:

ALTER TABLE <TABLE> IDENTITY = (select MAX(F27)+1 FROM <TABLE2>)
4

2 回答 2

2

您是否正在寻找UPDATE声明:

update table1 
set row3 = row3 + (select max(f27) from table2);
于 2013-06-27T00:25:44.067 回答
1

如果您重新设定 IDENTITY 值,它不会影响已经存在的行,而只会影响新插入的行。如果您的专栏是身份,您将无法更新它。

如果您只需要简单地更新值,那么您可以保持简单:

DECLARE @m INT
SELECT @m = MAX(F27)+1 FROM Table2

UPDATE Table1
SET Row3 = Row3 + @m

编辑 - 附加信息后: 如果您需要该列在更新后成为身份 - 您必须采取一些解决方法:

  1. 创建一个相同的新表,但具有标识属性。

  2. 为新表设置身份插入 ON

  3. 将数据从现有表复制到新表,调整所需 ID(已在旧表中更新)

  4. 为新表设置标识插入关闭

  5. DROP 现有表(或为了安全起见,暂时将其重命名为 TableName_OLD)

  6. 将新表重命名为旧名称

或者

只需使用 Management Studio 的表设计器将列的 IDENTITY 属性更改为是。它将在后台为您完成上述所有步骤。

于 2013-06-27T00:26:25.633 回答