2013-02-27 26 views
1

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

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

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

喜欢的东西......如果没有建立程序或用户不能访问,PRINT“ERROR对这个”

回答

3
  1. 我会读安迪的博客上“数据库测试驱动开发”。 http://sqlblog.com/blogs/andy_leonard/archive/2012/08/07/revisiting-test-driven-database-development.aspx

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%在db中已经“在服务中”的样子)。 还要注意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 
+0

感谢您的编辑!优秀! – 2013-02-27 15:05:00

+0

很酷。如果你没有得到更好的答复,并且这对你有帮助,那么“表示正确的答案”是值得赞赏的。 – granadaCoder 2013-02-27 15:26:50

+0

是的,对不起,我忘记了! – 2013-02-27 15:42:45