在生产中测试部署的方法?

时间:2013-02-27 13:46:16

标签: sql sql-server sql-server-2012

我要在生产数据库中实现许多更改,从创建新表到更改某些过程和约束。生产中的实施由第三方供应商手动完成。我要为每个脚本发送一个文件。我担心工具会出现一些错误或发生任何事情。但是,由于我要在舞台上部署与生产中相同的脚本,因此我需要在部署到其他环境之前制作一个好的后验证脚本。

所以,我想在每个表,视图和程序中留下评论,以便测试它们,但我不太确定使用这种方法。

有一种更好的方法可以测试更改是否成功应用而没有从表中插入/更新/删除或不运行过程,并从控制台获取“行”以便部署复制和粘贴的人我的输出消息?

类似于......如果没有创建过程或者用户没有访问权限,则打印“错误此处”

1 个答案:

答案 0 :(得分:3)

  1. 我会阅读Andy关于“数据库测试驱动开发”的博客。 http://sqlblog.com/blogs/andy_leonard/archive/2012/08/07/revisiting-test-driven-database-development.aspx
  2. 2。 我会以幂等的方式编写每个脚本。 在计算中,幂等操作是一个没有额外效果的操作,如果使用相同的输入参数多次调用它。

    3。 或 A.让第三方供应商在运行脚本时向您发送SSMS屏幕的“文本输出” 要么 B. 使用sqlcmd.exe,并使用日志记录功能,并要求他们向您发送.log文件。

    -o output_file

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

    这是一个“幂等”的.sql文件。如果dbo.Employee.LastName列最初为64个字符,则此脚本将更改它。更改为“NOT EXISTS”(并删除CHARACTER_MAXIMUM_LENGTH检查)以创建以前不存在的任何列(这是我的99%的脚本在已经“在服务中”的数据库中看起来像)。 另请注意变量的sqlcmd“占位符”。 但我可以运行下面的脚本1次或333次,结果会是一样的。

    Use [$(DBNAME)]
    GO
    
    :Error $(ErrorOutputFileFromCommandLine) 
    
    IF EXISTS (    SELECT TABLE_SCHEMA , TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'Employee' and TABLE_SCHEMA = 'dbo'    )
        BEGIN
    
            IF EXISTS 
            (
                SELECT * 
                    FROM [INFORMATION_SCHEMA].[COLUMNS] 
                WHERE   
                    TABLE_NAME = 'Employee' 
                    AND TABLE_SCHEMA = 'dbo'
                    AND COLUMN_NAME = 'LastName'
                    AND CHARACTER_MAXIMUM_LENGTH < 128
            )
                BEGIN
                    print 'Altering the column dbo.Employee.*LastName*'
    
                    ALTER TABLE [dbo].[Employee]
                    ALTER COLUMN [LastName] varchar(128) NOT NULL;
    
                END
            ELSE
                BEGIN
                    print 'The column dbo.Employee.*LastName* already exists and supports 128 characters.'
                END
    
        END
    
    GO
    
相关问题