2013-02-27 58 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