SQL Server 2008:什么时候不能修改表结构?什么时候不能删除一行?

时间:2009-06-05 13:43:39

标签: database-design sql-server-2008

几个夏天前我在公司工作,需要一个专为销售和记录而设计的Access DB。在那个夏天我遇到的一件事有时无法改变列的数据类型,删除列或删除行(条目)。并且,如果内存为我服务(这是五年前),我想我有时会复制整个数据表,用我想要的更改重新创建表,然后将其复制回来。老实说,可能是我遇到的大多数问题这与我当时极度缺乏数据库设计知识有关,我可能正试图改变你显然不应该做的事情。但是,这次我试图避免同样的问题。

今年夏天,我现在正在使用MS SQL Server 2008 Developer,并再次开始设计一个重要的数据库系统。因此,当我谈到这一点时,我的问题是,我将来不能再回去改变什么呢?具体来说,我知道大多数限制发生在主键/外键上,所以在设计时我应该注意什么?

例如:

  1. 我可以更改主键的数据类型吗?如果在另一个表中引用该怎么办?
  2. 我可以更改主键吗?如果它在另一个表中被引用?
  3. 我应该注意哪些其他明显的限制?对不起,如果这看起来像一个明显/愚蠢的问题,但我想很多初学者需要知道答案 - 我就是其中之一!

    谢谢!

3 个答案:

答案 0 :(得分:4)

如果该表未被外键引用,则转到头,更改主键。此外,如果您处于设计阶段并且表是空的,您通常可以非常灵活地更改FK和PK关系,因为空表没有任何行来检查是否符合要求。

还要记住,PK和FK的数据类型必须完全匹配(即bigint到bigint,smallint到smallint,而不是bigint到smallint)

1-除非使用工具,否则更改表的主键是一项非常重要的任务。如果您使用企业管理器并更改密钥,然后单击以显示脚本,您将看到所有约束被删除,目标表被备份,然后删除创建的新表并重建所有内容。如果旧主键中的数据没有转换,或者后来不是唯一的,那么希望所有内容都能顺利回滚。

2-相同的实际结果

什么时候不能删除行?在修改或删除FK表中的所有相应行之前,无法从PK表中删除。要从州表中删除德克萨斯州,您必须将所有订单记录更新为新的有效州名称,或删除它们。

答案 1 :(得分:4)

使用SQL 2008 Management Studio,您可以在工具中启用选项 - >阻止您保存任何需要重建表的更改的选项。然后,您可以创建一个数据库并尝试一系列操作,看看哪些工作,哪些工作没有。

我不是SQL专家所以我不知道所有需要重建表的情况,但我知道重新排序列(包括在表的末尾以外的任何地方添加新列)需要重建。

编辑:

另外我知道的另外两件事就是UDT和UDF的“架构限制”。当其他对象引用它们时,您无法更改这些内容。

答案 2 :(得分:0)

打开SQL Server Management Studio并使用SQLserver身份验证帐户sa *****登录系统。接下来你按照下面提到的步骤。

工具>选项>设计>防止保存表娱乐|删除复选框tic。

现在,您可以对表进行更改并保存在设计器视图中。