我的表包含100条记录,我需要为100条记录中的每条记录更新一个具有新值(每条记录的diff值)的列。我该怎么办呢。更新值的列不是主键。
答案 0 :(得分:6)
UPDATE tablename
SET columnname = CASE id
WHEN 1 THEN 42
WHEN 2 THEN 666
END
对于columnname
行,此42
行id = 1
将更新为666
,id = 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
}