如何更新表中所有行的列,其中包含100个记录的表中每行的不同值

时间:2011-07-01 03:39:53

标签: sql sql-server database sql-update

我的表包含100条记录,我需要为100条记录中的每条记录更新一个具有新值(每条记录的diff值)的列。我该怎么办呢。更新值的列不是主键。

5 个答案:

答案 0 :(得分:6)

UPDATE tablename
   SET columnname = CASE id
                        WHEN 1 THEN 42
                        WHEN 2 THEN 666
                    END

对于columnname行,此42id = 1将更新为666id = 2行{{1}}

答案 1 :(得分:1)

创建一个包含autoicrement id和原始表的列的表。

然后

INSERT INTO new_table (column1, column2,.....) -- refer all columns except autoincrement id
SELECT * FROM old_table

通过加入新表来更新旧表,假设它是一个关键复合或不区分每一行

答案 2 :(得分:0)

Set Unique constraint on this column.

ALTER TABLE YourTableName
ADD CONSTRAINT uc_ColumnID UNIQUE (ColumnName)

现在,每当您尝试使用重复值更新它时,sql server将不允许:)

也是一个长期的场景

答案 3 :(得分:0)

如果你在SQL Server 2005或更新(你没有完全指定.....),你可以轻松地使用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的序列,并且您将此唯一值设置为基础表。

答案 4 :(得分:0)

加载一个DataTable说dt,其中包含您要更新的表的特定行ID。 然后执行

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