首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何更新没有主键的重复行

如何更新没有主键的重复行
EN

Stack Overflow用户
提问于 2012-05-04 16:21:34
回答 4查看 3.8K关注 0票数 1

我有一个没有主键的表。

代码语言:javascript
复制
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。请帮帮我,如何做到这一点。

EN

回答 4

Stack Overflow用户

发布于 2012-05-04 17:35:28

您真正的问题是没有行号,也无法区分相同的行。如果您的数据仍然保持插入的顺序,那么到目前为止您已经很幸运了。SQL Server不保证行的排序,并且可以在没有通知的情况下随机排序。要保留您的排序,可以向表中添加标识列。

代码语言:javascript
复制
ALTER TABLE TableWithNoPrimaryKey
ADD RowNum int IDENTITY(1,1) PRIMARY KEY
票数 3
EN

Stack Overflow用户

发布于 2012-05-04 17:31:21

不可能在SQL中使用ROW_NUMBER函数,因为这些副本可能分散在成千上万条记录中。ROW_NUMBER用于获取带有OVER子句的行号,由于此类数据的存储是非聚集的,因此不可能删除。惟一的选择是向表中添加一些标识或唯一列,然后删除特殊记录,如果不希望表中包含新索引或新列,可以从表中删除该云。

票数 1
EN

Stack Overflow用户

发布于 2012-05-04 18:41:02

有一种方法可以做你想做的事情。不过,我们并不推荐这样做。

代码语言:javascript
复制
;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');
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10445236

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档