身份增量[关闭]
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
列,来自 Calls
或 Patient
表,这可能不起作用。我建议创建一个新的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
以上是关于身份增量[关闭]的主要内容,如果未能解决你的问题,请参考以下文章
将数据从 sql server 增量上传到 Amazon Redshift [关闭]