我正在尝试更新具有相同数据但具有不同ID的表,因此我想将两个公社的ID设置为结果的最低ID寄存器。
UPDATE TABLENAME
SET EXAMPLEID = LOWER(EXAMPLEID)
WHERE
TID = TID
AND
KID = KID
AND
STREET = STREET
我遇到以下错误:
消息8102,级别16,状态1,行1无法更新标识列 “ EXAMPLEID”
答案 0 :(得分:0)
您无法更新身份列。您可以使用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
如果要保留与以前相同的种子,则可能需要在插入行后使用适当的值重新设置标识。
答案 1 :(得分:0)
“身份”列通常与“主键”列一起使用。在您的情况下,如果ExampleID是您的主键和标识列,则不能在两个不同的行上使用相同的ExampleID。
每行的主键列都是唯一的
另一方面,如果您的列不是PK而是Identity列,则SQL Server不允许您更新Identity Key Column Value。
但是有No parameterless constructor defined for this object. in ASP.NET MVC Controller