修改数据库时的特殊情况

时间:2010-11-25 08:36:56

标签: sql sql-server database sql-server-2008 database-design

有时我在数据库设计中遇到以下情况,我想知道处理此案例的最佳做法是什么:::

例如我有一个特定的表,过了一会儿,当操作中的数据库和一些真实数据已经输入..我需要添加一些必需的字段(假设不接受null)..

在这种情况下最好的做法是什么..

使字段接受null为(已经在表格中输入了一些数据,并对重要约束进行了划分)并尝试通过代码中的某些验证强制用户输入此字段。

截断所有输入的数据并重新进入它们(繁琐的工作)..

有关此问题的任何其他建议......

4 个答案:

答案 0 :(得分:2)

这取决于要求。如果用于填充新列的现有行的数据不能立即可用,那么我通常更愿意创建一个新表,并在数据存在时填充新行。如果您拥有每一行的所有数据,则将新列放入原始表中。

答案 1 :(得分:1)

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

e.g。对于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

很多都会达到您的要求。

答案 2 :(得分:0)

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

答案 3 :(得分:-1)

最好的方法是截断数据并重新输入,但项目不必太繁琐。临时表和表变量可以帮助解决这个问题。我们想到一个简单的程序:

  1. 在SQL Server Management Studio中,右键单击要修改的表,然后选择Script Table As> CREATE To> New Query Editor Window

  2. #声明中的表名前添加CREATE

  3. 将所有记录移动到临时表中,使用以下内容:

    INSERT INTO #temp SELECT * FROM original

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

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

  6. 右键点击表格,然后选择Script Table As> INSERT To> Clipboard,将其粘贴到您的查询编辑器窗口中,并使用INSERT .. SELECT修改它以从临时表中读取记录。

  7. 就是这样。不可否认,不是很简单,但保存完好的数据库几乎总是值得轻微麻烦。