【问题标题】:create primary key on existing table without primary key in SQL Server在 SQL Server 中没有主键的现有表上创建主键
【发布时间】:2014-12-03 05:10:39
【问题描述】:

我正在尝试将现有列分配为没有主键的表中的主键(以及不同表中的另一个作为外键)。我试过这个: Altering a column: null to not null,它没有用。该列包含数字、文本和空值。

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

这是错误信息:

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

如果您能帮助解释错误消息,那就太好了。

谢谢!

【问题讨论】:

  • 您是否已经有一个列想要作为主键(具有唯一值且没有空值),还是想要一个新列?顺便说一句,您不想按照您提供的链接中的步骤进行操作。

标签: sql sql-server primary-key


【解决方案1】:

要向现有表添加主键,您可以这样做:

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

这将添加一个新列并使用从 1 开始的唯一整数值​​自动填充它。要将外键添加到另一个表,请使用与上述类似的语法,但在确定如何将其链接到现有主键之前不要将列设为 NOT NULL - 这是一个完全不同的问题。

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

我还没有测试过,但应该很接近你的需要。

【讨论】:

  • 我在要用作主键的列中找到了 10 个空值。不要以为我可以放弃那些。现在创建一个新列作为主要选项是唯一的选择吗?感谢您的回答!
  • 如果您要使用的列有任何重复值或空值,那么您将无法使用它。主键必须不为空且唯一。
【解决方案2】:

做一个

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

你就完成了。当然,这要求YourColumnHere 是一个不可为空 列。

【讨论】:

  • 我在要用作主键的列中找到了 10 个空值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-01-10
  • 1970-01-01
  • 2011-07-23
  • 1970-01-01
  • 2012-09-17
  • 1970-01-01
  • 2011-04-29
相关资源
最近更新 更多