我有一个数据库用于我的所有开发和测试,另一个数据库用作我的生产数据库。在两者之间编写表(仅限结构)差异的最佳方法是什么?我的开发人员数据库可能有我的生产所没有的新列,我需要将差异带入生产方面而不会(显然)影响生产数据库中的数据。
答案 0 :(得分:4)
如果您使用Visual Studio 2010 Ultimate / Premium Edition或Visual Studio Team / Database Edition 2008,您将在Visual Studio中找到所需的一切。 (另见Handling change in a database schema)
如果你不能使用VS2010 Ultimate或Premium而没有VS2008团队或数据库版本,我建议您查看一些http://www.red-gate.com/的产品(如http://www.red-gate.com/products/SQL_Compare/index.htm)及其近似特征。
答案 1 :(得分:3)
许多方法可以做到这一点,但最流行的方法之一是使用Red-Gate SQL Compare(www.red-gate.com)等工具。如果没有这样的工具,我们的开发小组就会丢失。
答案 2 :(得分:1)
我在dev中创建ALTER / CREATE脚本,然后在推送到prod期间将它们作为更新包的一部分运行。
还有一些工具可以做到这一点。 RedGate Compare是一个很棒的人! MS TFS DB版本也有模式比较,但RedGate更好,IMO。
答案 3 :(得分:0)
您想查看Red Gate SQL Compare。这将为您解决所有问题。
答案 4 :(得分:0)
我通常首先在生产中创建新字段(和表)。然后使用我的dev数据库的生产备份。这样,您永远不会错误地部署使用尚未部署的字段的代码。但我想这种方法最适合在没有严格部署程序的小公司工作(以及愤怒的DBA)。
答案 5 :(得分:0)
您可以使用系统视图来查询此数据。以下示例假定您的数据库位于同一服务器上。实质上,您为每个表/列/数据类型集创建一个子查询,并在表和列名称上连接两个。任何差异都将通过连接两侧的NULL来证明。如果你真的想变得聪明,可以添加一个标志列来检查数据类型。就个人而言,我会将这些数据复制到Excel中以便于排序/审核。
select
a.prod_table,
a.prod_column,
a.prod_column_datatype,
b.dev_table,
b.dev_column,
b.dev_column_datatype
from
(select
t1.name prod_table,
c1.name prod_column,
dt1.name prod_column_datatype
from
prod.sys.tables t1
join prod.sys.columns c1 on (t1.object_id = c1.object_id)
join prod.sys.types dt1 on (c1.system_type_id = dt1.system_type_id)) a
full outer join
(select
t2.name dev_table,
c2.name dev_column,
dt2.name dev_column_datatype
from
prod.sys.tables t2
join prod.sys.columns c2 on (t2.object_id = c2.object_id)
join prod.sys.types dt2 on (c2.system_type_id = dt2.system_type_id)) b
on (a.prod_table = b.dev_table and
a.prod_column = b.dev_column)
order by
a.prod_table,
a.prod_column,
b.dev_table,
b.dev_column