SQL UPDATE设置和ID与另一ID最小值

问题描述 投票:0回答:2

我试着去更新表我有相同的数据,但具有不同的ID,所以我想这两个communs的ID设置为结果最低的ID寄存器。

  UPDATE TABLENAME
      SET EXAMPLEID = LOWER(EXAMPLEID)
      WHERE
      TID = TID
      AND
      KID = KID
      AND 
      STREET = STREET

我收到以下错误:

消息8102,级别16,状态1,第1行无法更新标识列“EXAMPLEID”

sql-server ssms
2个回答
0
投票

标识列通常用于与主键列。在如果ExampleID是你的主键,也标识列的情况下,你不能有两个不同的行相同ExampleID。

主键列的每一行唯一

在另一方面,如果你列不是PK,但标识列,则SQL Server不允许你更新标识键列值。

但有a dirty workaround alternative for this (Not Recommended)


0
投票

不能更新标识列。您可以使用IDENTITY_INSERT明确的值插入新记录,但SQL Server不会让你做一个更新。

如果你真的需要做到这一点,你唯一的选择是暂时与更新的值再次复制整个表并重新创建你的决赛桌。这是强烈不推荐:

  1. 创建表的副本,与所有相关对象(如索引,约束等),但没有行(仅架构对象)。 CREATE TABLE TABLENAME_Mirror ( ExampleID INT IDENTITY, TID VARCHAR(100), KID VARCHAR(100), STREET VARCHAR(100))
  2. 设置IDENTITY_INSERT ON在这个新表,并与更新的值插入记录。 SET IDENTITY_INSERT TABLENAME_Mirror ON INSERT INTO TABLENAME_Mirror ( ExampleID, TID, KID, STREET) SELECT /*Updated values*/ FROM --.... SET IDENTITY_INSERT TABLENAME_Mirror OFF
  3. 删除原始表和重命名复制一个到原来的名称: BEGIN TRANSACTION IF OBJECT_ID('dbo.TABLENAME') is not null DROP TABLE dbo.TABLENAME EXEC sys.sp_rename 'dbo.TABLENAME_Mirror', 'TABLENAME' COMMIT

您可能需要使用适当的值补种的身份,一旦行被插入,如果你想保持相同的种子前。

© www.soinside.com 2019 - 2024. All rights reserved.