Sql 如何使用100条记录的表中每行的不同值更新表中所有行的列

Sql 如何使用100条记录的表中每行的不同值更新表中所有行的列,sql,sql-server,database,sql-update,Sql,Sql Server,Database,Sql Update,我的表包含100条记录,我需要为100条记录中的每一条更新一列,并使用新值(每条记录的差异值)。我如何才能做到这一点。要更新值的列不是主键 UPDATE tablename SET columnname = CASE id WHEN 1 THEN 42 WHEN 2 THEN 666 END 通过此查询,id=1的行的columnname将更新为42,i

我的表包含100条记录,我需要为100条记录中的每一条更新一列,并使用新值(每条记录的差异值)。我如何才能做到这一点。要更新值的列不是主键

UPDATE tablename
   SET columnname = CASE id
                        WHEN 1 THEN 42
                        WHEN 2 THEN 666
                    END
通过此查询,
id=1的行的
columnname
将更新为
42
,id=2的行的
666
将更新为

现在,无论何时尝试使用重复值更新它,sql server都不允许:)


另外,如果您使用的是SQL Server2005或更新版本(您没有确切指定…),您可以轻松地使用CTE(公共表表达式)实现此目的-基本上,您可以选择您的PK值,计数器从1开始计数,并将每行的
ColumnName
列设置为计数器的值:

;WITH UpdateData AS 
(
   SELECT 
      PKValue,
      ROW_NUMBER() OVER(ORDER BY .......) AS 'RowNum'
   FROM
      dbo.YourTable
)
UPDATE dbo.YourTable
SET ColumnName = u.RowNum
FROM UpdateData u
WHERE dbo.YourTable.PKValue = u.PKValue

这样,您将在CTE的
RowNum
字段中生成一个从1到100的序列,并将此唯一值设置为基础表。

创建一个具有autoicrement id和原始表列的表

然后


通过连接新表来更新旧表,假设是键复合还是非键复合,即区分每一行

加载一个数据表,例如dt,其中包含要更新的表的特定行ID。 然后执行

foreach(DataRow rw in dt.Rows)
{
    update table_name set column_name=desired_value where specific_column=rw
}

您能告诉我们列名以及如何为每行分配新值吗。需要更多详细信息。我相信您可以从UpdateData u…
将其写成
更新u集columName=u.rownum。换句话说,您可以直接在CTE(以及视图)上执行更新,只要它足够简单。@John Gibb:我相信只有在CTE中选择您计划更新的列时,这才有效。如果你这样做-你是对的,你可以直接更新CTE-在这样一个简单的例子中,在我看来,这并没有太大的区别。。。不管怎样-是的,它也能工作!
INSERT INTO new_table (column1, column2,.....) -- refer all columns except autoincrement id
SELECT * FROM old_table
foreach(DataRow rw in dt.Rows)
{
    update table_name set column_name=desired_value where specific_column=rw
}