2014-12-03 47 views
-1

我想在没有主键的表中将现有列分配为主键(以及另一个表作为外键)。我试过这个: Altering a column: null to not null,它没有工作。该列包含数字,文本和空值。在没有主键的现有表上创建主键在SQL Server中

有人可以创建一个分步指南,并与大家分享吗?

这是错误消息:

消息8152,级别16,状态13,行2
字符串或二进制数据将被截断。

如果你能帮助解释错误信息,那将会很棒。

谢谢!

+0

您是否已经有了一个要作为主键(它具有唯一值并且没有空值)的列或者是否需要一个新列?顺便说一句,你不想按照你提供的链接中的步骤。 – 2014-12-03 05:27:57

回答

0

一个主键添加到现有的表,你可以这样做:

ALTER TABLE yourTableName ADD yourColumnName INT NOT NULL PRIMARY KEY IDENTITY(1, 1) 

这将增加一个新的列,并自动以独特的整数值来填充它从一开始。要将外键添加到另一个表中,请使用与上述类似的语法,但在您已经计算出如何将其链接到现有主键之前,不要将该列设置为NOT NULL,这是一个完全不同的问题。

ALTER TABLE yourOtherTable ADD yourFKColumnName INT WITH CONSTRAINT [FK_SensibleForeignKeyName] FOREIGN KEY ([yourFKColumnName]) REFERENCES yourTableName([yourColumnName]) 

我还没有测试过,但应该是非常接近你所需要的。

+0

我在我想用作主键的列中找到了10个空值。不要以为我可以放弃这些。创建一个新列是现在唯一的选择吗?感谢您的回答! – WHZW 2014-12-03 12:55:11

+0

如果您要使用的列有任何重复值或空值,那么您将无法使用它。主键必须是非空且唯一的。 – 2014-12-03 20:05:54

0

只是做一个

ALTER TABLE dbo.YourTable 
ADD CONSTRAINT PK_YourTable 
PRIMARY KEY CLUSTERED (YourColumnHere) 

就大功告成了。这当然要求YourColumnHere列是不可空列列。

+0

我在我想用作主键的列中找到10个空值。 – WHZW 2014-12-03 12:55:36