我有一个没有主键的表。
name age sex
a 12 m
b 61 m
c 23 f
d 12 m
a 12 m
a 12 m
f 14 f我恰好有3个相似的行-行1,行5和行6。我希望更新row-5而不影响row-1和row-6。请帮帮我,如何做到这一点。
发布于 2012-05-04 17:35:28
您真正的问题是没有行号,也无法区分相同的行。如果您的数据仍然保持插入的顺序,那么到目前为止您已经很幸运了。SQL Server不保证行的排序,并且可以在没有通知的情况下随机排序。要保留您的排序,可以向表中添加标识列。
ALTER TABLE TableWithNoPrimaryKey
ADD RowNum int IDENTITY(1,1) PRIMARY KEY发布于 2012-05-04 17:31:21
不可能在SQL中使用ROW_NUMBER函数,因为这些副本可能分散在成千上万条记录中。ROW_NUMBER用于获取带有OVER子句的行号,由于此类数据的存储是非聚集的,因此不可能删除。惟一的选择是向表中添加一些标识或唯一列,然后删除特殊记录,如果不希望表中包含新索引或新列,可以从表中删除该云。
发布于 2012-05-04 18:41:02
有一种方法可以做你想做的事情。不过,我们并不推荐这样做。
;WITH cte AS
(
SELECT *, RowNum = ROW_NUMBER() OVER (ORDER BY GETDATE())
FROM [table]
)
UPDATE cte
SET age = age + 1
WHERE (RowNum = 5)
AND (name = 'a' AND age = 12 AND sex = 'm');https://stackoverflow.com/questions/10445236
复制相似问题