自动编写SQL Server架构更改脚本

时间:2010-07-07 18:02:47

标签: sql-server-2005 automation

我正在开发一个项目,我们正在将客户端数据库从旧版本更新到更新版本的数据库和相关模式。

我正在寻找一种方法,对我们程序使用的数据库中的所有表执行以下操作。

If the table doesn't exist
  create table
else
  for each column in the table
    bring the column up to date or create it

我似乎无法通过管理工作室找到这样做的方法,而且我没有通过Google提供任何建议。

在SQL Management Studio中为我提供此选项的东西或者为我生成脚本的程序都会很好。

感谢。

4 个答案:

答案 0 :(得分:1)

您可以使用INFORMATION_SCHEMA视图编写一个过程来为此方案生成代码。它是免费的:)!

DECLARE @Table_of_Tables TABLE
(
   Id int,
   Table_name varchar(50)
)
DECLARE @tablename varchar(50)
DECLARE @iterator int
DECLARE @count int
DECLARE SQL nvarchar(max)

SET @SQL = ''

INSERT INTO @Table_of_Tables 
SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES

SELECT @count = COUNT(1) FROM @Table_of_Tables 
SET @iterator = 1

WHILE(@iterator  <= @Count)
BEGIN
    SET @SQL = @SQL + ' IF EXISTS(SELECT 1 FROM sys.sysobjects where type = ''u'' and name = ''+ @Table_of_Tables +'''      SET @SQL = @SQL + ' BEGIN '
    SET @SQL = @SQL + <CreateTableScriptHere> 
    SET @SQL = @SQL + ' END '
    SET @SQL = @SQL + ' ELSE '
    SET @SQL = @SQL + ' BEGIN '
    -- Similar Loop to generate code for all the columns in this table
    -- SELECT COLUMN_NAME FROM INFROMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = @tablename
    SET @SQL = @SQL + ' END '

    SET @iterator = @iterator + 1
END

答案 1 :(得分:0)

您有两种主要选择

Redgate's SQL Compare(很棒的工具)

MS Visual Studio for Database Developers

答案 2 :(得分:0)

http://www.red-gate.com/products/SQL_Compare/

它可以自动比较和同步数据库模式或创建脚本来更新一个数据库以匹配另一个数据库的模式

答案 3 :(得分:0)

对于自家种植的选项,您可以随时查看此博客的建议: http://www.tewari.info/dbupdater/

基本上,在创建和设置基准数据库之后,您可以将脚本化的更改添加到目录并运行此应用程序。该应用程序将忽略已存在的任何更改,使您的数据库对象达到最新和最大。如果您需要在架构结构更新后创建数据或执行任何其他操作,还可以包含“后处理”功能。

缺点是它的手册,但它确实可以让你对事物有很好的控制。