Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2005 SQL Server架构更改的自动脚本编写_Sql Server 2005_Automation - Fatal编程技术网

Sql server 2005 SQL Server架构更改的自动脚本编写

Sql server 2005 SQL Server架构更改的自动脚本编写,sql-server-2005,automation,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 如果表不存在 创建表 其他的 对于表中的每一列 使列处于最新状态或创建它 我似乎无法通过ManagementS

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

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

If the table doesn't exist create table else for each column in the table bring the column up to date or create it 如果表不存在 创建表 其他的 对于表中的每一列 使列处于最新状态或创建它 我似乎无法通过ManagementStudio找到这样做的方法,而且我还没有通过谷歌找到任何东西

在SQLManagementStudio中给我这个选项,或者给我一个为我生成脚本的程序,都会很好


谢谢。

您有两个主要选择

(很棒的工具)


.

您有两个主要选择

(很棒的工具)

.

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


它可以自动比较和同步数据库架构,或者创建脚本来更新一个数据库,使之与另一个数据库的架构相匹配

对于自主开发的选项,您可以随时查看此博客以获取建议:

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


缺点是它的手册,但它确实给了你一个很好的控制水平。

对于一个土生土长的选项,你可以随时查看本博客,以获得建议:

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


缺点是它是手动的,但它确实给了您很好的控制水平。

您可以编写一个过程,通过使用信息模式视图为这个schenario生成代码。免费:)

DECLARE@Table\u of_Tables
(
Id int,
表_name varchar(50)
)
声明@tablename varchar(50)
声明@iterator int
声明@countint
声明SQL nvarchar(最大值)
设置@SQL=''
插入到@Table\u中
从INFORMATION_SCHEMA.TABLES中选择TABLE_NAME
从@Table\u中选择@count=count(1)
设置@iterator=1

WHILE(@iterator您可以编写一个过程,使用SCHEMA视图中的信息为这个schenario生成代码。免费:)

DECLARE@Table\u of_Tables
(
Id int,
表_name varchar(50)
)
声明@tablename varchar(50)
声明@iterator int
声明@countint
声明SQL nvarchar(最大值)
设置@SQL=''
插入到@Table\u中
从INFORMATION_SCHEMA.TABLES中选择TABLE_NAME
从@Table\u中选择@count=count(1)
设置@iterator=1

而(@iterator)客户端数据库是否都是相同的结构?在这种情况下,是Redgate产品(SQLCompare、SQL DataCompare或SQL Packager)应该做你需要的。如果不解释他们没有做什么,我们可以提出更好的建议。@Martin Smith-我对这些工具非常熟悉,他们只是没有做我需要他们做的事情。客户端数据库都是相同的结构吗?在这种情况下,Redgate产品(SQLCompare、SQL DataCompare或SQL Packager)应该做你需要的。如果不解释他们不做什么,我们可以提供更好的建议。@Martin Smith-我非常熟悉这些工具,他们只是不完全做我需要他们做的事情。是的,SQL Compare是我看过的东西,但它不能做我需要它做的事情。你能在VS OptioneX上详细解释一下它不做什么吗?你知道吗可以与之进行数据和/或模式比较…visual studio选项内置于visual studio 2010 premium或ultimate中。它还可以进行模式和数据比较。是的,SQL比较是我看过的东西,但它不能做我需要它做的事。你能详细解释VS选项吗?它不能做什么?你可以做数据和/或chema与之进行了比较…visual studio选项内置于visual studio 2010 premium或ultimate中。它还进行模式和数据比较。我想你可以这样做。这是最接近我需要的,但我最终使用codesmith生成脚本。我想你可以这样做。这是任何人都能找到我需要的东西,但我最终使用codesmith生成了我的脚本。
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