public static string ScriptForMissingColumns(CodeTableAudit codeTable)
        {
            //if(SqlSync.DbInformation.InfoHelper.UpdateDateFields.Length == 0 || SqlSync.DbInformation.InfoHelper.UpdateIdFields.Length == 0)
            if (!SqlSync.DbInformation.InfoHelper.codeTableAuditCols.IsValid)
            {
                SqlSync.DbInformation.InfoHelper.SetUpdateColumnNames();
            }

            string tableName = codeTable.TableName;
            string schema;

            InfoHelper.ExtractNameAndSchema(tableName, out tableName, out schema);
            //Create the columns as null
            StringBuilder sb = new StringBuilder();

            if (codeTable.CreateIdColumn.Length == 0)
            {
                sb.Append(ScriptTemplates.ADD_UPDATE_ID_COLUMN.Replace("<<tableName>>", tableName)
                          .Replace("<<schema>>", schema)
                          .Replace("<<columnName>>", SqlSync.DbInformation.InfoHelper.codeTableAuditCols.CreateIdColumns[0])
                          .Replace("<<userName>>", System.Environment.UserName));
            }

            if (codeTable.CreateDateColumn.Length == 0)
            {
                sb.Append(ScriptTemplates.ADD_UPDATE_DATE_COLUMN.Replace("<<tableName>>", tableName)
                          .Replace("<<schema>>", schema)
                          .Replace("<<columnName>>", SqlSync.DbInformation.InfoHelper.codeTableAuditCols.CreateDateColumns[0])
                          .Replace("<<date>>", DateTime.Now.ToString()));
            }

            if (codeTable.UpdateIdColumn.Length == 0)
            {
                sb.Append(ScriptTemplates.ADD_UPDATE_ID_COLUMN.Replace("<<tableName>>", tableName)
                          .Replace("<<schema>>", schema)
                          .Replace("<<columnName>>", SqlSync.DbInformation.InfoHelper.codeTableAuditCols.UpdateIdColumns[0])
                          .Replace("<<userName>>", System.Environment.UserName));
            }

            if (codeTable.UpdateDateColumn.Length == 0)
            {
                sb.Append(ScriptTemplates.ADD_UPDATE_DATE_COLUMN.Replace("<<tableName>>", tableName)
                          .Replace("<<schema>>", schema)
                          .Replace("<<columnName>>", SqlSync.DbInformation.InfoHelper.codeTableAuditCols.UpdateDateColumns[0])
                          .Replace("<<date>>", DateTime.Now.ToString()));
            }

            return(sb.ToString());
        }
        public static string ScriptColumnDefaultsReset(CodeTableAudit codeTable)
        {
            string tableName = codeTable.TableName;
            string schema;

            InfoHelper.ExtractNameAndSchema(tableName, out tableName, out schema);
            StringBuilder sb = new StringBuilder();

            if (codeTable.UpdateIdColumn.Length > 0)
            {
                sb.Append(ScriptTemplates.DropExistingDefaultConstraint.Replace("<<tableName>>", tableName)
                          .Replace("<<schema>>", schema)
                          .Replace("<<columnName>>", codeTable.UpdateIdColumn)
                          .Replace("<<defaultValue>>", "SYSTEM_USER"));
            }

            if (codeTable.UpdateDateColumn.Length > 0)
            {
                sb.Append(ScriptTemplates.DropExistingDefaultConstraint.Replace("<<tableName>>", tableName)
                          .Replace("<<schema>>", schema)
                          .Replace("<<columnName>>", codeTable.UpdateDateColumn)
                          .Replace("<<defaultValue>>", "getdate()"));
            }

            if (codeTable.CreateIdColumn.Length > 0)
            {
                sb.Append(ScriptTemplates.DropExistingDefaultConstraint.Replace("<<tableName>>", tableName)
                          .Replace("<<schema>>", schema)
                          .Replace("<<columnName>>", codeTable.CreateIdColumn)
                          .Replace("<<defaultValue>>", "SYSTEM_USER"));
            }

            if (codeTable.CreateDateColumn.Length > 0)
            {
                sb.Append(ScriptTemplates.DropExistingDefaultConstraint.Replace("<<tableName>>", tableName)
                          .Replace("<<schema>>", schema)
                          .Replace("<<columnName>>", codeTable.CreateDateColumn)
                          .Replace("<<defaultValue>>", "getdate()"));
            }

            return(sb.ToString());
        }
        public static string ScriptForUpdateTrigger(CodeTableAudit auditTable, ConnectionData connData)
        {
            string updateDateCol = auditTable.UpdateDateColumn;
            string updateIdCol   = auditTable.UpdateIdColumn;
            string tableName     = auditTable.TableName;
            string schema;

            InfoHelper.ExtractNameAndSchema(tableName, out tableName, out schema);
            string        triggerName  = String.Format(updateTrigFormat, tableName, schema);
            string        shortTrigger = String.Format(shortTrigFormat, tableName);
            StringBuilder remove       = new StringBuilder();

            remove.Append("IF EXISTS (SELECT name FROM sys.objects WHERE name = '" + shortTrigger + "' AND type = 'TR')\r\n");
            remove.Append("\tDROP TRIGGER " + triggerName + "\r\n");
            remove.Append("GO\r\n\r\n");



            if (updateDateCol == string.Empty || updateIdCol == string.Empty)
            {
                return(string.Empty);
            }

            ArrayList pkCols = GetPrimaryKeyColumnsWithType(auditTable.TableName, connData);

            if (pkCols.Count == 0)
            {
                return(string.Empty);
            }

            StringBuilder sb = new StringBuilder();

            sb.Append("CREATE TRIGGER " + triggerName + " ON [" + schema + "].[" + tableName + "] FOR UPDATE, INSERT\r\nAS\r\nBEGIN\r\n");
            for (int i = 0; i < pkCols.Count; i++)
            {
                string[] col = (string[])pkCols[i];
                sb.Append("\tDECLARE @" + col[0].Replace(" ", "") + " " + col[1] + "\r\n");
            }
            sb.Append("\r\n\tSELECT ");
            for (int i = 0; i < pkCols.Count; i++)
            {
                string[] col = (string[])pkCols[i];
                sb.Append("@" + col[0].Replace(" ", "") + "=[" + col[0] + "],");
            }
            sb.Length = sb.Length - 1;
            sb.Append(" FROM inserted\r\n\r\n");

            sb.Append("\tIF NOT EXISTS(SELECT 1 FROM [" + schema + "].[" + tableName + "] WHERE ");
            for (int i = 0; i < pkCols.Count; i++)
            {
                string[] col = (string[])pkCols[i];
                sb.Append("[" + col[0] + "]=@" + col[0].Replace(" ", "") + " AND ");
            }
            sb.Length = sb.Length - 4;
            sb.Append(")\r\n");
            sb.Append("\t\tRAISERROR('Unable to complete UpdateId/UpdateDate auditing trigger for [" + schema + "].[" + tableName + "] table. PK Value Not Found. Change Rolled Back.',16,1)\r\n\r\n");

            sb.Append("\r\n\tSELECT @@nestlevel");
            sb.Append("\r\n\tIF @@nestlevel <= 10");
            sb.Append("\r\n\tBEGIN");

            sb.Append("\r\n\t\tUPDATE [" + schema + "].[" + tableName + "] SET [" + updateDateCol + "] = getdate(), [" + updateIdCol + "] = SYSTEM_USER\r\n");
            sb.Append("\t\tWHERE ");
            for (int i = 0; i < pkCols.Count; i++)
            {
                string[] col = (string[])pkCols[i];
                sb.Append("[" + col[0] + "]=@" + col[0].Replace(" ", "") + " AND ");
            }
            sb.Length = sb.Length - 4;

            sb.Append("\r\n\r\n\t\tIF(@@Error <> 0)\r\n");
            sb.Append("\t\t\tRAISERROR('Unable to complete UpdateId/UpdateDate auditing trigger for [" + schema + "].[" + tableName + "] table. Change Rolled Back.',16,1)\r\n");

            sb.Append("\r\n\tEND");
            sb.Append("\r\nEND");
            sb.Append("\r\nGO\r\n");


            return(remove.ToString() + sb.ToString());
        }