我2个表合并成1,使用下面的语句标识增量
Select Calls.*,Patient.*
INTO Calls2
From Calls,Patient
现在,我设置列作为主键的一个,但我不能让该主键有标识递增。 我该怎么做才能做到这一点?
由于提前, 马杜
我2个表合并成1,使用下面的语句标识增量
Select Calls.*,Patient.*
INTO Calls2
From Calls,Patient
现在,我设置列作为主键的一个,但我不能让该主键有标识递增。 我该怎么做才能做到这一点?
由于提前, 马杜
首先,你应该知道你正在做你的表的笛卡尔积。如果你想添加,当你创建表的标识列,然后执行以下操作:
Select IDENTITY(INT,1,1) ID, Calls.*,Patient.*
INTO Calls2
From Calls,Patient
使用SQL Server Management Studio中
鼠标右键单击该表,然后单击Design
。在右侧窗口底部的Column Properties
中,向下滚动至Identity Specification
。展开此项,然后将(Is Identity)
值更改为Yes
。
但是,如果表格中已有Id
列,则可能是Calls
或Patient
表中的这一列可能无效。我建议创建一个新的Id
列并配置Id
列如上。
执行CREATE TABLE
“硬”的方式?您可以从sys.columns
轻松构建这样的命令。
或者在Management Studio中设置属性。请注意,这会丢弃表并重新创建它,所以如果表很大,则希望应用程序锁定一段时间。
你不能把现有的列到标识列*如果你需要一个标识列,加新列:
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在他的回应中提到的那样,该表格正在重新创建,其中的列被定义为标识列。
[是的,你可以...](http://stackoverflow.com/questions/6084572/how-to-set-auto-increment-after-creating-a-table-without-any-data-loss/6086661#6086661) – 2012-02-21 16:42:32
我忘了设计师让你做到这一点。补充说明(我希望)。谢谢。 – eric 2012-02-21 17:00:50
这不是我的意思,因为整个表格被重新创建。您可以这样做,因为元数据只能通过“ALTER TABLE ... SWITCH”进行更改 – 2012-02-21 17:02:17
它根本不是“非规范化”。这只是SQL语句。有一个在这里阅读http://msdn.microsoft.com/en-us/library/ms190750.aspx和这里http://msdn.microsoft.com/en-us/library/ms188029.aspx – 2012-02-21 16:38:57
这是一个交叉连接所以除非其中一个表只有'<= 1'行,否则每个列都会有重复的值。你是如何从这个创建一个PK? – 2012-02-21 16:40:05
@Martin的身份当然会是PK。为什么我们会关心实际数据是否是唯一的? :-) – 2012-02-21 21:25:39