身份增量[关闭]

Posted

技术标签:

【中文标题】身份增量[关闭]【英文标题】:Identity Increment [closed] 【发布时间】:2012-03-11 23:32:12 【问题描述】:

我将 2 个表合并为 1 个,使用以下语句

Select Calls.*,Patient.*
INTO Calls2
From Calls,Patient

现在,我将其中一列设置为主键,但我无法让该主键具有标识增量。 我该怎么做?

提前致谢, 马杜

【问题讨论】:

根本不是“非规范化”。这只是 SQL 语句。在这里阅读msdn.microsoft.com/en-us/library/ms190750.aspx 和这里msdn.microsoft.com/en-us/library/ms188029.aspx 这是一个交叉连接,所以除非其中一个表只有<= 1 行,否则每一列都会有重复的值。你是如何从中创建 PK 的? @Martin 的身份当然是 PK。我们为什么要关心实际数据是否唯一? :-) 【参考方案1】:

首先,您应该知道您正在对表格进行笛卡尔积。如果您想在创建表时添加标识列,请执行以下操作:

Select IDENTITY(INT,1,1) ID, Calls.*,Patient.*
INTO Calls2
From Calls,Patient

【讨论】:

【参考方案2】:

以“硬”方式执行CREATE TABLE?您可以从sys.columns 轻松构建这样的命令。

或者在 Management Studio 中设置属性。请注意,这会删除表并重新创建它,因此如果表很大,您的应用程序可能会锁定一段时间。

【讨论】:

【参考方案3】:

使用 SQL Server Management Studio

鼠标右键单击表格并单击Design。在右侧窗口底部的Column Properties 中,向下滚动到Identity Specification。展开它,然后将 (Is Identity) 值更改为 Yes

但是,如果您的表中已有 Id 列,来自 CallsPatient 表,这可能不起作用。我建议创建一个新的Id 列并按照上述方式配置Id 列。

【讨论】:

【参考方案4】:

您不能将现有列转换为标识列。* 如果您需要标识列,请添加新列:

ALTER TABLE Calls2 ADD Calls2Id int NOT NULL IDENTITY(1,1) ;

或者,如果您需要使用现有列之一,则需要使用显式 CREATE TABLE 来定义表,而不是 SELECT...INTO。您还需要在 INSERT INTO 之前使用 SET IDENTITY INSERT Calls2 ON。

CREATE TABLE Calls2 (
    ...columns...
) ;
SET IDENTITY_INSERT Calls2 ON ;
INSERT INTO Calls2 (... columns ...) SELECT ... columns ... FROM Calls, Patient ;
SET IDENTITY_INSERT Calls2 OFF ;

*尽管设计者可能会假装将其变成身份列,但实际上并非如此。正如 Aaron Bertrand 在他的回复中提到的那样,正在重新创建该表,并将列定义为一开始就定义为标识列。

【讨论】:

Yes you can... 我忘了设计师让你这么做的。添加了一个注释来澄清(我希望)。谢谢。 这不是我的意思,因为整个表都会重新创建。您可以将其作为元数据仅更改为ALTER TABLE ... SWITCH

以上是关于身份增量[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

PetaPoco - 如何关闭自动增量?

JSON对象的增量编码[关闭]

C增量指针与for()循环性能[关闭]

将数据从 sql server 增量上传到 Amazon Redshift [关闭]

无法使用存储过程获得确切的结果,因为它返回带有增量的值[关闭]

复合主键?还是具有唯一复合索引的自动增量主键? [关闭]