/// <summary> /// トリガーのスクリプト作成 /// </summary> /// <param name="scrp">出力するスクリプトの設定</param> /// <param name="db">データベース</param> /// <param name="csvDataList">CSV情報</param> /// <param name="appendFile">追記指示</param> private static void CreateScriptTrigger(Scripter scrp, Database db, List <CsvData> csvDataList, bool appendFile) { // T = トリガー の場合 var objectTypeName = "Trigger"; foreach (var tr in db.Triggers) { // 対象オブジェクト情報を設定 var targetObjectInfo = new CsvData(); // スクリプト情報を取得 StringCollection sc = null; if (tr is DatabaseDdlTrigger) { var ddlTrigger = tr as DatabaseDdlTrigger; if (ddlTrigger.IsSystemObject) { // システムオブジェクトの場合は、対象外 continue; } targetObjectInfo.OwnerName = string.Empty; targetObjectInfo.ObjectName = ddlTrigger.Name; objectTypeName = "DdlTrigger"; // スクリプト情報を設定 sc = scrp.Script(new Urn[] { ddlTrigger.Urn }); } if ((string.IsNullOrEmpty(targetObjectInfo.OwnerName)) && (string.IsNullOrEmpty(targetObjectInfo.ObjectName))) { continue; } if (!csvDataList.Any(x => x.ObjectName == targetObjectInfo.ObjectName)) { // CSVに該当データなし continue; } if (null == sc) { // CSVに該当データなし continue; } // スクリプト作成 CreateScript(db.Name, objectTypeName, targetObjectInfo, sc, appendFile); } }
/// <summary> /// スクリプト作成 /// </summary> /// <param name="dbName">DB名</param> /// <param name="objectTypeName">オブジェクトタイプ名</param> /// <param name="targetObjectInfo">対象オブジェクト情報</param> /// <param name="sc">スクリプト情報</param> /// <param name="appendFile">追記指示</param> /// <returns>実行結果(true:正常)</returns> private static bool CreateScript(string dbName, string objectTypeName, CsvData targetObjectInfo, StringCollection sc, bool appendFile) { var sbScriptData = new StringBuilder(); sbScriptData.AppendFormat("/****** Object: {3} [{0}].[{1}] Script Date:{2} ******/" , targetObjectInfo.OwnerName , targetObjectInfo.ObjectName , System.DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss") , objectTypeName ); sbScriptData.AppendLine(); foreach (var st in sc) { sbScriptData.AppendLine(st); sbScriptData.AppendLine("GO"); } var txtScript = sbScriptData.ToString(); if (string.IsNullOrEmpty(txtScript)) { return(false); } // 所有者があるオブジェクトのみ、所有者を設定する var ownerName = targetObjectInfo.OwnerName; if (!string.IsNullOrEmpty(ownerName)) { ownerName += "."; } var outputPath = _pathAssembly + "\\" + string.Format("{0}{1}.{2}.sql", ownerName, targetObjectInfo.ObjectName, objectTypeName); //書き込むファイルが既に存在している場合は、上書きする using (var sw = new System.IO.StreamWriter(outputPath, appendFile)) { sw.Write(txtScript); } _outputScriptCount++; return(true); }
/// <summary> /// テーブルトリガーのスクリプト作成 /// </summary> /// <param name="scrp">出力するスクリプトの設定</param> /// <param name="db">データベース</param> /// <param name="csvDataList">CSV情報</param> /// <param name="appendFile">追記指示</param> private static void CreateScriptTableTrigger(Scripter scrp, Database db, List <CsvData> csvDataList, bool appendFile) { // TT = テーブルトリガー の場合 var objectTypeName = "TableTrigger"; foreach (Table table in db.Tables) { foreach (Trigger tr in table.Triggers) { // スクリプト情報を取得 StringCollection sc = null; // 対象オブジェクト情報を設定 var targetObjectInfo = new CsvData(); targetObjectInfo.ObjectName = table.Owner; targetObjectInfo.ObjectName = tr.Name; if (tr.IsSystemObject) { // システムオブジェクトの場合は、対象外 continue; } if (!csvDataList.Any(x => x.ObjectName == targetObjectInfo.ObjectName)) { // CSVに該当データなし continue; } // スクリプト情報を設定 sc = scrp.Script(new Urn[] { tr.Urn }); if (null == sc) { // CSVに該当データなし continue; } // スクリプト作成 CreateScript(db.Name, objectTypeName, targetObjectInfo, sc, appendFile); } } }
/// <summary> /// パラメータ判定 /// </summary> /// <param name="logger">ロガー</param> /// <param name="objectType">オブジェクトタイプ</param> /// <param name="csvFilePath">CSVファイルのパス</param> /// <param name="csvDataList">CSVデータリスト</param> /// <returns>実行結果(true:正常)</returns> private static bool JudgeParameter(ILog logger, string objectType, string csvFilePath, List <CsvData> csvDataList) { #region 第1:オブジェクトタイプ { if ("U" == objectType) { // U = テーブル(ユーザー定義) } else if ("V" == objectType) { // V = ビュー の場合 } else if ("P" == objectType) { // P = ストアド プロシージャ の場合 } else if ("F" == objectType) { // F = ユーザー定義関数 の場合 } else if ("TT" == objectType) { // TT = テーブルトリガー の場合 } else if ("T" == objectType) { // T = トリガー の場合 } else { var errMessage = string.Format("想定外のオブジェクトタイプです。オブジェクトタイプ[{0}]", objectType); logger.Error(errMessage); System.Console.WriteLine(errMessage); return(false); } } #endregion #region 第2:ファイルパス { if (string.IsNullOrEmpty(csvFilePath)) { var errMessage = "CSVのファイルパスが指定されていません。"; logger.Error(errMessage); System.Console.WriteLine(errMessage); return(false); } if (!File.Exists(csvFilePath)) { var errMessage = "CSVのファイルが存在しません。"; logger.Error(errMessage); System.Console.WriteLine(errMessage); return(false); } // CSVファイル読み込み using (var sw = new StreamReader(csvFilePath, false)) { var line = string.Empty; while ((line = sw.ReadLine()) != null) { if (string.IsNullOrEmpty(line)) { continue; } var lineDatas = line.Split(','); if (2 != lineDatas.Count()) { continue; } var csvData = new CsvData(); csvData.OwnerName = lineDatas[0]; csvData.ObjectName = lineDatas[1]; csvDataList.Add(csvData); } } } #endregion return(true); }