1

新しいテーブルの作成からいくつかの手順や制約の変更まで、本番データベースに多くの変更を実装する必要があります。本番環境での実装は、サードベンダーによって手動で行われます。スクリプトごとにファイルを送信する必要があります。実装がエラーを起こすか、何かが起こるのではないかと心配しています。ただし、本番環境と同じスクリプトを段階的にデプロイする必要があるため、他の環境にデプロイする前に、適切な検証後のスクリプトを作成する必要があります。

したがって、テストするために、すべてのテーブル、ビュー、およびプロシージャにコメントを残すことを考えていますが、この方法を使用するかどうかはよくわかりません。

テーブルからの挿入/更新/削除を行わずに、またはプロシージャを実行せずに変更が正常に適用されたかどうかをテストし、展開する人が出力をコピーして貼り付けるためにコンソールから「行」を取得するためのより良い方法がありますメッセージ?

プロシージャが作成されていないか、ユーザーがアクセスできない場合は、「ERRORONTHIS」と印刷してください。

4

1 に答える 1

3
  1. 「データベーステスト駆動開発」に関するAndyのブログを読みました。 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文字だった場合、このスクリプトはそれを変更します。「NOTEXISTS」に変更して(そして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
于 2013-02-27T14:05:16.853 に答える