如何更新保存当前数据的表结构

时间:2011-01-02 05:41:07

标签: sql-server

我有一个C#应用程序,它使用SQL Server 2008数据库中的表(在带有本地SQL Server的独立PC上运行)。

最初我在这台电脑上安装了一些初始数据的数据库(应用程序使用了一些表,用户也没有触摸)。

问题是 - 如何在用户创建一些新数据而不损害它之后升级此数据库(我继续在另一台PC上开发并可以添加一些新表或存储过程或向现有表添加一些列)。

我的意思是,当我发布新版本时,我会在备份文件(或其他任何东西?)上添加新版本的数据库,其中包含新结构和那些初始表,我需要升级现有数据库而不会丢失当前数据。

提前致谢!

4 个答案:

答案 0 :(得分:4)

您需要使用ALTER TABLE等命令使用更改脚本升级现有数据库结构。

基本上有两种方法可以做到这一点:

  • 您可以使用基于“diff”的工具(如Red-Gate SQL Compare)来确定数据库版本x和版本(x + 1)之间的差异。该工具将为您创建一个更改脚本,然后您可以在目标计算机上执行该脚本以将数据库升级到新结构

  • 或者您可以手动编写这些更改脚本并将其打包并在目标计算机上执行它们

无论哪种方式:您需要跟踪数据库版本,并且需要格外小心,不要因任何脚本(例如丢弃表格或其他内容)而导致任何数据丢失。

答案 1 :(得分:1)

添加新表不应该损害现有表。但是在添加列时,应该小心为现有行填充这些列的值(特别是如果列对它们具有非空约束 - 在这种情况下,您必须使用DEFAULT子句)。您可以使用DEFAULT子句并在创建列之后运行特殊的SQL查询来实现此目的,以便在现有行中设置新列的值。

答案 2 :(得分:0)

您还可以使用外键将一个表中的行与另一个表中的行相链接。这可能有助于缩小您的表格并使您的数据更加隔离。

答案 3 :(得分:0)

真的很讨厌没有具体细节,但是......

一般来说:

  1. 将当前表重命名为临时表
  2. 使用新配置创建表
  3. 从临时表INTO新表中选择
  4. 如果一切正常,请删除临时表
  5. 所有这一切都可以在一个脚本中完成。我已经看到它完成了。

    或者,您可能需要考虑这个: SQL Server Management Studio - how to change a field type without dropping table