代码之家  ›  专栏  ›  技术社区  ›  Anyname Donotcare

修改数据库时的特殊情况

  •  1
  • Anyname Donotcare  · 技术社区  · 14 年前

    有时我在数据库设计中会遇到以下情况,我想知道处理这种情况的最佳实践是什么:

    例如,我有一个特定的表,过了一会儿,当数据库正在运行并且一些实际数据已经输入时。。我需要添加一些必需的字段(应该不接受空值)。。

    在这种情况下,最佳做法是什么。。

    使该字段接受空值作为(表中已输入的某些数据,并取消重要约束),并尝试通过代码中的某些验证强制用户输入该字段。。

    截短所有输入的数据并重新输入(繁琐的工作)。。

    关于这个问题的任何其他建议。。。

    4 回复  |  直到 14 年前
        1
  •  -1
  •   Ioannis Karadimas    14 年前

    最好的方法是截短数据并再次输入,但不必太繁琐。临时表和表变量可以在很大程度上帮助解决这个问题。想到一个简单的步骤:

    1. 在sqlservermanagementstudio中,右键单击要修改的表并选择 Script Table As > CREATE To > New Query Editor Window .

    2. 添加 # 在表的前面 CREATE 陈述。

    3. 将所有记录移动到临时表中,使用的效果如下:

      INSERT INTO #temp SELECT * FROM original

    4. 然后运行脚本将所有记录保存到临时表中。

    5. 截断原始表,并进行任何必要的更改。

    6. 右键单击表并选择 编写表脚本为 > INSERT To > Clipboard ,将其粘贴到查询编辑器窗口中,并修改它以从临时表中读取记录,使用 INSERT .. SELECT .

    就这样。诚然不是很简单,但是一个保存良好的数据库几乎总是值得一点小小的麻烦。

        2
  •  2
  •   nvogel    14 年前

    这取决于要求。如果无法立即填充新列的现有行的数据,那么我通常希望在数据存在时创建新表并填充新行。如果每行都有所有数据,则将新列放入原始表中。

        3
  •  1
  •   kevchadders    14 年前

    如果可能,我将为新列设置默认值。

    例如,对于Varchar

    alter table table_name 
        add column_name varchar(10) not null 
        constraint column_name_default default ('Test') 
    

    更新后,可以删除默认值

    alter table table_name 
    drop constraint column_name_default
    

    很多都会符合你的要求。

        4
  •  0
  •   ceth    14 年前

    这取决于您的应用程序、数据库方案和实体。