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

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

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

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

提前致谢, 马杜

【问题讨论】:

标签: sql-server-2008 auto-increment


【解决方案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 在他的回复中提到的那样,正在重新创建该表,并将列定义为一开始就定义为标识列。

        【讨论】:

        • 我忘了设计师让你这么做的。添加了一个注释来澄清(我希望)。谢谢。
        • 这不是我的意思,因为整个表都会重新创建。您可以将其作为元数据仅更改为ALTER TABLE ... SWITCH
        猜你喜欢
        • 1970-01-01
        • 2023-03-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-10-25
        • 2015-07-24
        • 1970-01-01
        • 2013-05-17
        相关资源
        最近更新 更多