如何更新数据库模式而不删除表

时间:2011-09-19 13:05:35

标签: sql database nhibernate schema

要更新现有数据库,我们包含安装程序运行的更新sql文件。它会查看表是否存在,如果不存在则会创建表和字段。这是来自某些nHibernate功能的自动生成的文件。

IF NOT EXISTS (select * from dbo.sysobjects where id = object_id(N'[dbo].[TableA]') 
and OBJECTPROPERTY(id, N'IsUserTable') = 1)
BEGIN
create table

这适用于创建新数据库,但在开发期间,当表的内容发生变化时,这意味着测试部门必须删除其数据库并从头开始。这对他们来说非常耗时,因为他们必须再次使用新数据填充表格。我对sql的知识非常有限,到目前为止,我对搜索解决方案的搜索已经证明没有结果。

有没有办法让表更新,无论它们是否存在,都不必丢弃架构并重新开始?

非常感谢

1 个答案:

答案 0 :(得分:1)

您正在寻找的是ALTER TABLE,ADD语句。

http://msdn.microsoft.com/en-us/library/ms190273.aspx

ALTER TABLE Comments ADD newColumn INT 

作为一个例子。

那么,问题就变成了如何为整个数据库执行此操作? 您需要的是拥有一个SQL Delta工具。 (这是一个http://www.sqldelta.com/的示例,但还有其他人!)

然后,此工具将生成一个更新脚本,您可以在旧数据库上运行该脚本以使其与最新数据库同步。