【问题标题】:Will Adding an Identity Column to a T-SQL Table Break Anything将标识列添加到 T-SQL 表会破坏任何事情
【发布时间】:2014-05-15 13:34:32
【问题描述】:

我有一个包含多个无键表的旧数据库。一方面,我真的很想在其上添加一个 Identity 列,这样我就可以将它与 Entity Framework 一起使用。现在,我知道我可以做到:

alter table MyTable
add Id int identity(1,1)

但由于这是一只古老而苍白的野兽,我想确保它不会破坏任何东西。我无法想象它会如何破坏任何 procs 或现有数据访问(其中一些仍在 VB 6 中!)但“无法想象”与“绝对确定”并不完全相同。

我希望一些数据库专家可以在这里给我一些指导。

【问题讨论】:

  • 是否有任何东西使用Select * from ...,然后通过索引而不是名称来引用列?
  • 如果您在某处使用* 而不是指定列名,您最终可能会遇到麻烦,具体取决于客户端的编码方式。
  • 我会说一个 Select * 然后在某处按索引引用列当然是可能的。但是,身份被添加为表格的最后一列,所以我认为这不会影响它。

标签: sql-server tsql sql-server-2005


【解决方案1】:

如果您的代码中有任何“Select *”,它可能会破坏某些内容。

示例:

您创建一个包含 3 列的 #temp 表。

您的表格有 3 列。

您使用“select * from TheTable”来填充#temp 表。

现在您向表中添加第 4 列。

您的代码现在将尝试将 4 列塞进一个 3 列的 #temp 表中。

拥有一个不是 PrimaryKey 的 IDENTITY 列可能是另一个问题。

【讨论】:

  • 我无法想象任何将额外的 id 列作为非 PK 的情况都会导致问题。事实上,很可能已经有一个 PK 可以简单地继续用作 PK。
  • 它可能不会导致问题。然而,我的脑海里有一个小声音在说“记住你在 IDENTITY 不是 PK 的表上创建了一个 edmx 文件”......而 EF 不喜欢那样。 (这是早期的 EF,我现在使用“映射”).......所以这只是一种预感,没有什么具体的描述。
  • 谢谢,我试图了解为什么这可能会导致问题,这就是我发表评论的原因(一般来说并不苛刻)。有缺陷的软件确实非常敏感。所以你的答案主要是,不应该是一个固有的问题,但是......
猜你喜欢
  • 2016-01-22
  • 1970-01-01
  • 2020-05-23
  • 2021-10-30
  • 1970-01-01
  • 2021-06-06
  • 1970-01-01
  • 2017-05-28
  • 2014-09-10
相关资源
最近更新 更多