AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 264970
Accepted
JohnP
JohnP
Asked: 2020-04-15 07:34:15 +0800 CST2020-04-15 07:34:15 +0800 CST 2020-04-15 07:34:15 +0800 CST

如何更正 MS SQL 2014 中的主键字段

  • 772

我有一个使用序列号作为数据库主键的表。我们有一些序列号的错误导入,其中在字段的开头包含了一个撇号。

我试图使用语句删除它

update [xxx].[dbo].[xxx] set [xxx].[dbo].[xxx].[keynumber] = replace([xxx].[dbo].[xxx].[keyNumber], '''','')

当我这样做时,我收到以下错误:

Msg 2627, Level 14, State 1, Line 1
Violation of PRIMARY KEY constraint 'xxx$PrimaryKey'. Cannot insert duplicate key in object 'dbo.xxx'. The duplicate key value is (123456789).

有没有办法可以更新此字段并删除单个撇号而不违反约束?

sql-server-2014
  • 1 1 个回答
  • 63 Views

1 个回答

  • Voted
  1. Best Answer
    John K. N.
    2020-04-16T01:40:27+08:002020-04-16T01:40:27+08:00

    我们需要表定义才能得到明确的答案。看起来当您从序列号中删除单个撇号时,该值与已经存在的值相同。因此出现错误消息。

    看起来导入文件已更正并再次导入,导致多个值包含例如类似于12345和的值'12345。

    解决方案

    我会先尝试搜索几乎相同的主键,看看是否可以删除它们。

    我用db<>fiddle创建了一个虚拟场景,向您展示它是如何工作的。

    创建表

    create table xxx (keynumber nvarchar(10) primary key clustered, comment nvarchar(20)) 
    

    插入伪数据

    insert into xxx (keynumber,comment) 
    values 
    ('12345','First Comment'), 
    ('''12345','Second Comment'), 
    ('12346','Third Comment'), 
    ('''12346','Fourth Comment'),
    ('123457','Fith Comment')
    

    选择伪重复

    SELECT x1.keynumber, x2.keynumber 
    FROM [xxx].[dbo].[xxx] as x1 
         JOIN [xxx].[dbo].[xxx] as x2
         ON '''' + x1.keynumber = x2.keynumber
    

    结果

    钥匙号码 | 键号
    :-------- | :--------
    12345 | '12345   
    12346 | '12346   
    

    然后,您可以删除重复项或重命名它们(请参阅替代项)

    清理完重复项后,您将能够运行UPDATE.... 在此之前,您有一些体力劳动要做。

    替代/重命名

    不只是删除撇号,而是向具有撇号的值添加一个附加值keynumber。例如添加CHK到keynumber

    UPDATE [xxx].[dbo].[xxx] 
    SET [xxx].[dbo].[xxx].[keynumber] = replace([xxx].[dbo].[xxx].[keyNumber], '''','CHK')
    

    这样,您将能够看到必须检查哪些值。

    观察

    如果该列keynumber是一个int,那么就不可能进入'12345该表。

    • 1

相关问题

  • SQL Server 2014 的版本谎言 [关闭]

  • “将数据库部署到 SQL Azure”任务丢失

  • 在 SQL Server 查询中放置 ASSERT

  • 如何在 SQL Server 升级搞砸数据库快照后“hack-drop”它

  • 多语句事务中不允许使用 ALTER DATABASE 语句

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve