如何解决添加新的主键列
| SQL SERVER,我正在使用一个使用GUID作为键而不是int的表,但是对于我正在处理的集成,我需要将它作为int。因此,我想写一些东西来创建一个ID列(如果不存在),并用下一个最高ID填充它。我不太确定该怎么做。有人有这样做的代码吗? 我已经尝试过此操作,但是更新无效,因为它们为nullIF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = \'c_Product\'AND COLUMN_NAME = \'ProductId\')
BEGIN
ALTER TABLE c_Product ADD ProductId INT
END
UPDATE c_Product SET ProductId = (SELECT Max(ProductId) + 1 END FROM c_Product)
解决方法
我在这里稠密吗?您是否不只是想做:
IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = \'c_Product\'AND COLUMN_NAME = \'ProductId\')
BEGIN
ALTER TABLE c_Product ADD ProductId INT IDENTITY(1,1) not null
END
它将为所有现有行分配标识值,然后在插入新行时提供新编号。
, 好的,因此您添加了一个名为ProductId的类型为INT的列,顺便说一下,该列为NULL。 SQL Server以三种状态之一存储值。 TRUE,FALSE,NULL。现在请记住,Null不为空,不为零,不为真,也不为假。几乎是永远不会发生并且不存在的事情。明白这点?好的,因此在“新建”列中具有最高值的行是---- NULL。那么MAX(PorductId)是什么?空值。什么是Null +1?空值。因此,除非您在任何地方将一个值设置为1,否则您将永远陷入这个永无止境的循环中。
回到表设计。使用GUID作为主键是非常不好的!这将严重影响表的性能。除非您编写的应用程序必须连接多个服务器和平台,否则请远离使用GUIDS作为主键。详细的解释,但是基本上所有插入都是随机的,然后每次插入都会发生索引页拆分,并且搜索也较慢,并且仅将每行16个字节用于PK列是不好的。然后将其添加到所有其他NC索引中,坏坏坏。如果可以,请永久更改表结构。使用和诠释。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。