我试着去更新表我有相同的数据,但具有不同的ID,所以我想这两个communs的ID设置为结果最低的ID寄存器。
UPDATE TABLENAME
SET EXAMPLEID = LOWER(EXAMPLEID)
WHERE
TID = TID
AND
KID = KID
AND
STREET = STREET
我收到以下错误:
消息8102,级别16,状态1,第1行无法更新标识列“EXAMPLEID”
标识列通常用于与主键列。在如果ExampleID是你的主键,也标识列的情况下,你不能有两个不同的行相同ExampleID。
主键列的每一行唯一
在另一方面,如果你列不是PK,但标识列,则SQL Server不允许你更新标识键列值。
不能更新标识列。您可以使用IDENTITY_INSERT
明确的值插入新记录,但SQL Server不会让你做一个更新。
如果你真的需要做到这一点,你唯一的选择是暂时与更新的值再次复制整个表并重新创建你的决赛桌。这是强烈不推荐:
CREATE TABLE TABLENAME_Mirror (
ExampleID INT IDENTITY,
TID VARCHAR(100),
KID VARCHAR(100),
STREET VARCHAR(100))
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
BEGIN TRANSACTION
IF OBJECT_ID('dbo.TABLENAME') is not null
DROP TABLE dbo.TABLENAME
EXEC sys.sp_rename
'dbo.TABLENAME_Mirror',
'TABLENAME'
COMMIT
您可能需要使用适当的值补种的身份,一旦行被插入,如果你想保持相同的种子前。