using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Data.SqlClient; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.IO; using System.Reflection; namespace DatabaseComparison { public partial class Form1 : Form { StringBuilder _sbErrMsg = new StringBuilder(); List _oTableLists = new List(); SqlConnection _SQLServerSourceConnection = null; SqlConnection _SQLServerDestinationConnection = null; DataTable _dtIdentityColumns = null; string _sourceConnetionString; string _destinationConnetionString; static Dictionary _dataTypes = new Dictionary(); public Form1() { InitializeComponent(); } [Serializable] public enum EnumTargetType { Source = 1, Destination = 2 } [Serializable] public enum EnumParamType { InParamType = 1, EqualParamType = 2 } [Serializable] public enum EnumDBType { SqlServer = 1, Oracle = 2, MySql = 3 } [Serializable] public enum EnumScriptType { CreateTable = 1, AlterTable = 2, AlterColumn = 3 } private void btnGetSource_Click(object sender, EventArgs e) { Cursor.Current = Cursors.WaitCursor; try { GetConnection(EnumTargetType.Source, txtSourceServer.Text, txtSourceUserNane.Text, txtSourcePassword.Text); cmbSourceDatabase.DataSource = null; cmbSourceDatabase.Items.Clear(); cmbSourceDatabase.DataSource = (GetDatabaseList(EnumTargetType.Source)); cmbSourceDatabase.DisplayMember = "Name"; cmbSourceDatabase.SelectedIndex = 0; } catch (Exception exp) { MessageBox.Show(exp.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } finally { Cursor.Current = Cursors.Default; } } private void GetConnection(EnumTargetType eTargetType, string sServer, string sName, string sPassword) { if (eTargetType == EnumTargetType.Source) _sourceConnetionString = @"Data Source=" + sServer + ";User ID=" + sName + ";Password=" + sPassword + ";"; else _destinationConnetionString = @"Data Source=" + sServer + ";User ID=" + sName + ";Password=" + sPassword + ";"; } private void GetConnection(EnumTargetType eTargetType, string sServer, string sDatabase, string sName, string sPassword) { if (eTargetType == EnumTargetType.Source) _sourceConnetionString = @"Data Source=" + sServer + ";Initial Catalog=" + sDatabase + ";User ID =" + sName + ";Password=" + sPassword + ";"; else _destinationConnetionString = @"Data Source=" + sServer + ";Initial Catalog=" + sDatabase + ";User ID =" + sName + ";Password=" + sPassword + ";"; } public List GetDatabaseList(EnumTargetType eTargetType) { List list = new List(); string Connection = ""; if (eTargetType == EnumTargetType.Source) Connection = _sourceConnetionString; else Connection = _destinationConnetionString; using (SqlConnection con = new SqlConnection(Connection)) { con.Open(); using (SqlCommand cmd = new SqlCommand("SELECT name from sys.databases order by name", con)) { using (IDataReader dr = cmd.ExecuteReader()) { while (dr.Read()) { list.Add(dr[0].ToString()); } } } con.Close(); } return list; } public List GetTableList(EnumTargetType eTargetType) { try { List list = new List(); string Connection = ""; if (eTargetType == EnumTargetType.Source) Connection = _sourceConnetionString; else Connection = _destinationConnetionString; using (SqlConnection con = new SqlConnection(Connection)) { con.Open(); using (SqlCommand cmd = new SqlCommand("SELECT name FROM sys.Tables order by name", con)) { using (IDataReader dr = cmd.ExecuteReader()) { while (dr.Read()) { list.Add(dr[0].ToString()); } } } con.Close(); } return list; } catch (Exception exp) { throw new Exception(exp.Message); } } public DataTable GetColumnList(EnumTargetType eTargetType, string sTableName) { //List list = new List(); try { DataTable dt = new DataTable(); string Connection = ""; if (eTargetType == EnumTargetType.Source) Connection = _sourceConnetionString; else Connection = _destinationConnetionString; using (SqlConnection con = new SqlConnection(Connection)) { con.Open(); using (SqlCommand cmd = new SqlCommand("SELECT column_name, data_type,character_maximum_length,IS_NULLABLE,COLUMN_DEFAULT, NUMERIC_PRECISION,NUMERIC_SCALE FROM information_schema.columns WHERE table_name = '" + sTableName + "' ORDER BY ORDINAL_POSITION", con)) { using (IDataReader dr = cmd.ExecuteReader()) { dt.Load(dr); } } con.Close(); } return dt; } catch (Exception exp) { throw new Exception(exp.Message); } } public DataTable GetIdentityColumnList(EnumTargetType eTargetType) { //List list = new List(); try { DataTable dt = new DataTable(); string Connection = ""; if (eTargetType == EnumTargetType.Source) Connection = _sourceConnetionString; else Connection = _destinationConnetionString; using (SqlConnection con = new SqlConnection(Connection)) { con.Open(); using (SqlCommand cmd = new SqlCommand(@"select o.name, c.name from sys.objects o inner join sys.columns c on o.object_id = c.object_id where c.is_identity = 1", con)) { using (IDataReader dr = cmd.ExecuteReader()) { dt.Load(dr); } } con.Close(); } return dt; } catch (Exception exp) { throw new Exception(exp.Message); } } public string UpdateColumn(string sTableName, string sColumnName, string sValue, string sCondition) { string sSqlCommand = ""; if (sCondition == "") { sSqlCommand = "IF COL_LENGTH('dbo." + sTableName + "', '" + sColumnName + "') IS NOT NULL " + " BEGIN " + " update " + sTableName + " set " + sColumnName + " ='" + sValue + "' " + " END "; } else { sSqlCommand = "IF COL_LENGTH('dbo." + sTableName + "', '" + sColumnName + "') IS NOT NULL " + " BEGIN " + " update " + sTableName + " set " + sColumnName + " ='" + sValue + "' WHERE " + sCondition + " END "; } return sSqlCommand; } public DataTable GePrimaryKeyList(EnumTargetType eTargetType) { //List list = new List(); try { DataTable dt = new DataTable(); string Connection = ""; if (eTargetType == EnumTargetType.Source) Connection = _sourceConnetionString; else Connection = _destinationConnetionString; using (SqlConnection con = new SqlConnection(Connection)) { con.Open(); using (SqlCommand cmd = new SqlCommand(@"SELECT OBJECT_NAME(ic.OBJECT_ID) AS TableName, c.name AS ColumnName, i.name AS ConstraintName FROM sys.indexes AS i INNER JOIN sys.index_columns AS ic ON i.OBJECT_ID = ic.OBJECT_ID AND i.index_id = ic.index_id INNER JOIN sys.columns AS c ON ic.OBJECT_ID = c.OBJECT_ID AND ic.column_id = c.column_id WHERE i.is_primary_key = 1;", con)) { using (IDataReader dr = cmd.ExecuteReader()) { dt.Load(dr); } } con.Close(); } return dt; } catch (Exception exp) { throw new Exception(exp.Message); } } public DataTable GeForeignKeyList(EnumTargetType eTargetType) { //List list = new List(); try { DataTable dt = new DataTable(); string Connection = ""; if (eTargetType == EnumTargetType.Source) Connection = _sourceConnetionString; else Connection = _destinationConnetionString; using (SqlConnection con = new SqlConnection(Connection)) { con.Open(); using (SqlCommand cmd = new SqlCommand(@"SELECT f.name AS Constraint_Name, OBJECT_NAME(f.parent_object_id) AS FK_Table, c1.name AS FK_Column, OBJECT_NAME(f.referenced_object_id) AS Reference_Table, c2.name AS Referenced_Column FROM sys.foreign_keys AS f INNER JOIN sys.foreign_key_columns AS fk_cols ON f.object_id = fk_cols.constraint_object_id INNER JOIN sys.columns AS c1 ON f.parent_object_id = c1.object_id AND fk_cols.parent_column_id = c1.column_id INNER JOIN sys.columns AS c2 ON f.referenced_object_id = c2.object_id AND fk_cols.referenced_column_id = c2.column_id;", con)) { using (IDataReader dr = cmd.ExecuteReader()) { dt.Load(dr); } } con.Close(); } return dt; } catch (Exception exp) { throw new Exception(exp.Message); } } public DataTable GetDefaultConstraint(EnumTargetType eTargetType) { //List list = new List(); try { DataTable dt = new DataTable(); string Connection = ""; if (eTargetType == EnumTargetType.Source) Connection = _sourceConnetionString; else Connection = _destinationConnetionString; using (SqlConnection con = new SqlConnection(Connection)) { con.Open(); using (SqlCommand cmd = new SqlCommand(@"SELECT t.name AS TableName, c.name AS ColumnName, d.name AS DefaultConstraintName, d.definition AS DefaultDefinition FROM sys.default_constraints d INNER JOIN sys.columns c ON d.parent_object_id = c.object_id AND d.parent_column_id = c.column_id INNER JOIN sys.tables t ON t.object_id = c.object_id", con)) { using (IDataReader dr = cmd.ExecuteReader()) { dt.Load(dr); } } con.Close(); } return dt; } catch (Exception exp) { throw new Exception(exp.Message); } } public DataTable GetColumnList(EnumTargetType eTargetType) { //List list = new List(); try { DataTable dt = new DataTable(); string Connection = ""; if (eTargetType == EnumTargetType.Source) Connection = _sourceConnetionString; else Connection = _destinationConnetionString; using (SqlConnection con = new SqlConnection(Connection)) { con.Open(); using (SqlCommand cmd = new SqlCommand(@"select 'sp_RENAME ''' + t.name + '.' + QUOTENAME(c.Column_Name) + ''', ''' + UPPER(c.Column_Name) + ''', ''COLUMN'';' As Command from sys.tables t INNER JOIN information_schema.columns c ON c.Table_Name = t.Name WHERE lower(t.name)IN('monthlyworkplan', 'dailyattnprocess', 'attnrawdata', 'salarymonthly', 'salarymonthlydetail', 'salaryempcostcenter', 'salarytempit', 'incometaxtemp', 'bonustempit','incometaxyearly') ORDER BY t.name", con)) { using (IDataReader dr = cmd.ExecuteReader()) { dt.Load(dr); } } con.Close(); } return dt; } catch (Exception exp) { throw new Exception(exp.Message); } } private void cmbSourceDatabase_SelectedIndexChanged(object sender, EventArgs e) { Cursor.Current = Cursors.WaitCursor; try { GetConnection(EnumTargetType.Source, txtSourceServer.Text, cmbSourceDatabase.Text, txtSourceUserNane.Text, txtSourcePassword.Text); List sTables = GetTableList(EnumTargetType.Source); FillSourceList(sTables); lblSourceCount.Text = "Total Table :" + sTables.Count; } catch (Exception exp) { MessageBox.Show(exp.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } finally { Cursor.Current = Cursors.Default; } } private void FillSourceList(List sTables) { lsvSourceList.Items.Clear(); ListViewItem li = null; foreach (string sName in sTables) { li = new ListViewItem(); li.Text = sName; lsvSourceList.Items.Add(li); } } private void FillDestinationList(List sTables) { lsvDestinationList.Items.Clear(); ListViewItem li = null; foreach (string sName in sTables) { li = new ListViewItem(); li.Text = sName; lsvDestinationList.Items.Add(li); } } private void cmbDestinationDatabase_SelectedIndexChanged(object sender, EventArgs e) { Cursor.Current = Cursors.WaitCursor; try { GetConnection(EnumTargetType.Destination, txtDestinationServer.Text, cmbDestinationDatabase.Text, txtDestinationUserNane.Text, txtDestinationPassword.Text); List sTables = GetTableList(EnumTargetType.Destination); FillDestinationList(sTables); lblDestinationCount.Text = "Total Table :" + sTables.Count; } catch (Exception exp) { MessageBox.Show(exp.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } finally { Cursor.Current = Cursors.Default; } } private void btnGetDestination_Click(object sender, EventArgs e) { Cursor.Current = Cursors.WaitCursor; try { GetConnection(EnumTargetType.Destination, txtDestinationServer.Text, txtDestinationUserNane.Text, txtDestinationPassword.Text); cmbDestinationDatabase.Items.Clear(); cmbDestinationDatabase.DataSource = (GetDatabaseList(EnumTargetType.Destination)); cmbDestinationDatabase.DisplayMember = "Name"; cmbDestinationDatabase.SelectedIndex = 0; } catch (Exception exp) { MessageBox.Show(exp.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } finally { Cursor.Current = Cursors.Default; } } public bool IsTableExists(string sTableName) { bool found = false; foreach (ListViewItem li in lsvDestinationList.Items) { if (sTableName.ToLower().Trim() == li.Text.ToLower().Trim()) { found = true; break; } } return found; } public bool IsColumnExists(DataRow dr, DataTable lsv) { bool found = false; foreach (DataRow li in lsv.Rows) { if (dr[0].ToString().ToLower().Trim() == li[0].ToString().ToLower().Trim()) { found = true; break; } } return found; } public bool IsColumnExistsWithType(DataRow dr, DataTable lsv) { bool found = false; foreach (DataRow li in lsv.Rows) { if (dr[0].ToString().ToLower().Trim() == li[0].ToString().ToLower().Trim() && dr[1].ToString().ToLower().Trim() == li[1].ToString().ToLower().Trim() && dr[3].ToString().ToLower().Trim() == li[3].ToString().ToLower().Trim() && dr[4].ToString().ToLower().Trim() == li[4].ToString().ToLower().Trim() && dr[5].ToString().ToLower().Trim() == li[5].ToString().ToLower().Trim() && dr[6].ToString().ToLower().Trim() == li[6].ToString().ToLower().Trim()) { found = true; break; } if (dr[0].ToString().ToLower().Trim() == li[0].ToString().ToLower().Trim() && dr[1].ToString().ToLower().Trim() == li[1].ToString().ToLower().Trim() && dr[3].ToString().ToLower().Trim() == li[3].ToString().ToLower().Trim() && dr[5].ToString().ToLower().Trim() == li[5].ToString().ToLower().Trim() && dr[6].ToString().ToLower().Trim() == li[6].ToString().ToLower().Trim() && dr[4].ToString().ToLower().Trim() == "" && li[4].ToString().ToLower().Trim() != "") { found = true; break; } //int nSourceSize = 0; //int nDestinationSize = 0; //try //{ // nSourceSize = Convert.ToInt16(dr[2].ToString().ToLower().Trim()); //} //catch { } //try //{ // nDestinationSize = Convert.ToInt16(li[2].ToString().ToLower().Trim()); //} //catch { } //if (dr[0].ToString().ToLower().Trim() == li[0].ToString().ToLower().Trim() // && dr[1].ToString().ToLower().Trim() == li[1].ToString().ToLower().Trim() // && nSourceSize < nDestinationSize // && dr[3].ToString().ToLower().Trim() == li[3].ToString().ToLower().Trim() // && dr[4].ToString().ToLower().Trim() == li[4].ToString().ToLower().Trim() // && dr[5].ToString().ToLower().Trim() == li[5].ToString().ToLower().Trim() // && dr[6].ToString().ToLower().Trim() == li[6].ToString().ToLower().Trim()) //{ // found = true; // break; //} } return found; } private TableList GetObject(string sTableName, DataRow dr) { TableList oItem = new TableList(); oItem.TableName = sTableName.ToUpper(); oItem.ColumnName = dr[0].ToString().ToUpper(); oItem.DataType = dr[1].ToString().ToUpper(); oItem.Length = dr[2].ToString().ToUpper(); oItem.AllowNull = dr[3].ToString().ToUpper(); oItem.DefaultValue = dr[4].ToString().ToUpper(); oItem.Precision = dr[5].ToString().ToUpper(); oItem.Scale = dr[6].ToString().ToUpper(); oItem.IsDefaultValueRequired = false; return oItem; } private void btnCompate_Click(object sender, EventArgs e) { var watch = System.Diagnostics.Stopwatch.StartNew(); Cursor.Current = Cursors.WaitCursor; StringBuilder sbCreate = new StringBuilder(); StringBuilder sbAlterMain = new StringBuilder(); StringBuilder sbAlter = new StringBuilder(); IEnumerable lv = lsvDestinationList.Items.Cast(); _oTableLists = new List(); foreach (ListViewItem li in lsvSourceList.CheckedItems) { TableList oItem = null; lblMsg.Text = "Compare Table : " + li.Text; lblMsg.Refresh(); if (IsTableExists(li.Text)) { bool diff = false; GetConnection(EnumTargetType.Source, txtSourceServer.Text, cmbSourceDatabase.Text, txtSourceUserNane.Text, txtSourcePassword.Text); DataTable dtSource = GetColumnList(EnumTargetType.Source, li.Text); GetConnection(EnumTargetType.Destination, txtDestinationServer.Text, cmbDestinationDatabase.Text, txtDestinationUserNane.Text, txtDestinationPassword.Text); DataTable dtDestination = GetColumnList(EnumTargetType.Destination, li.Text); int nCount = 1; int nDiffCount = 1; foreach (DataRow dr in dtSource.Rows) { if (!IsColumnExists(dr, dtDestination)) { oItem = GetObject(li.Text, dr); oItem.ScriptType = EnumScriptType.AlterTable; if (dr[1].ToString().ToLower() == "int") { oItem.Precision = ""; oItem.Scale = ""; } else if (dr[1].ToString().ToLower() == "float") { oItem.Length = oItem.Precision; oItem.Precision = ""; } if ((dr[1].ToString().ToLower() == "varchar" || dr[1].ToString().ToLower() == "nvarchar" || dr[1].ToString().ToLower() == "varbinary") && dr[2].ToString() == "-1") { oItem.Length = "MAX"; } else if (dr[1].ToString().ToLower() == "text") { oItem.Length = ""; } if (dr[3].ToString().ToLower() == "no") { if (dr[4].ToString().ToLower() == "") { if (dr[1].ToString().ToLower() == "date" || dr[1].ToString().ToLower() == "datetime" || dr[1].ToString().ToLower() == "datetime2") oItem.DefaultValue = "GETDATE()"; else if (dr[1].ToString().ToLower() == "char" || dr[1].ToString().ToLower() == "nchar" || dr[1].ToString().ToLower() == "varchar" || dr[1].ToString().ToLower() == "nvarchar" || dr[1].ToString().ToLower() == "text") oItem.DefaultValue = "''"; else if (dr[1].ToString().ToLower() == "int" || dr[1].ToString().ToLower() == "bit" || dr[1].ToString().ToLower() == "smallint" || dr[1].ToString().ToLower() == "money" || dr[1].ToString().ToLower() == "numeric" || dr[1].ToString().ToLower() == "decimal" || dr[1].ToString().ToLower() == "float" || dr[1].ToString().ToLower() == "tinyint") oItem.DefaultValue = "0"; oItem.IsDefaultValueRequired = true; } } if (oItem.ColumnName.ToLower() == "payrolltypeid" || oItem.ColumnName.ToLower() == "createdby") { oItem.AllowNull = "NO"; oItem.DefaultValue = textBox2.Text == "" ? "1" : textBox2.Text; if (oItem.ColumnName.ToLower() == "createdby") oItem.DefaultValue = textBox1.Text == "" ? "1" : textBox2.Text; } _oTableLists.Add(oItem); } nCount++; } foreach (DataRow dr in dtSource.Rows) { if (!IsColumnExistsWithType(dr, dtDestination)) { oItem = GetObject(li.Text, dr); TableList ob = _oTableLists.Find(x => x.TableName == oItem.TableName && x.ColumnName == oItem.ColumnName && x.ScriptType == EnumScriptType.AlterTable); if (ob != null) { nCount++; continue; } oItem.ScriptType = EnumScriptType.AlterColumn; if (dr[1].ToString().ToLower() == "int") { oItem.Precision = ""; oItem.Scale = ""; } else if (dr[1].ToString().ToLower() == "float") { oItem.Length = oItem.Precision; oItem.Precision = ""; } if ((dr[1].ToString().ToLower() == "varchar" || dr[1].ToString().ToLower() == "nvarchar" || dr[1].ToString().ToLower() == "varbinary") && dr[2].ToString() == "-1") { oItem.Length = "MAX"; } else if (dr[1].ToString().ToLower() == "text") { oItem.Length = ""; } if (dr[3].ToString().ToLower() == "no") { if (dr[4].ToString().ToLower() == "") { if (dr[1].ToString().ToLower() == "date" || dr[1].ToString().ToLower() == "datetime" || dr[1].ToString().ToLower() == "datetime2") oItem.DefaultValue = "GETDATE()"; else if (dr[1].ToString().ToLower() == "char" || dr[1].ToString().ToLower() == "nchar" || dr[1].ToString().ToLower() == "varchar" || dr[1].ToString().ToLower() == "nvarchar" || dr[1].ToString().ToLower() == "text") oItem.DefaultValue = "''"; else if (dr[1].ToString().ToLower() == "int" || dr[1].ToString().ToLower() == "bit" || dr[1].ToString().ToLower() == "smallint" || dr[1].ToString().ToLower() == "money" || dr[1].ToString().ToLower() == "numeric" || dr[1].ToString().ToLower() == "decimal" || dr[1].ToString().ToLower() == "float" || dr[1].ToString().ToLower() == "tinyint") oItem.DefaultValue = "0"; oItem.IsDefaultValueRequired = true; } } if (oItem.ColumnName.ToLower() == "payrolltypeid" || oItem.ColumnName.ToLower() == "createdby") { oItem.AllowNull = "NO"; oItem.DefaultValue = textBox2.Text == "" ? "1" : textBox2.Text; if (oItem.ColumnName.ToLower() == "createdby") oItem.DefaultValue = textBox1.Text == "" ? "1" : textBox2.Text; } _oTableLists.Add(oItem); } else { } nCount++; } } else { GetConnection(EnumTargetType.Source, txtSourceServer.Text, cmbSourceDatabase.Text, txtSourceUserNane.Text, txtSourcePassword.Text); DataTable dt = GetColumnList(EnumTargetType.Source, li.Text); int nCount = 1; if (dt != null && dt.Rows.Count > 0) { foreach (DataRow dr in dt.Rows) { oItem = GetObject(li.Text, dr); oItem.ScriptType = EnumScriptType.CreateTable; //if (nCount != 1) //{ // oItem.TableName = ""; //} if (dr[1].ToString().ToLower() == "int") { oItem.Precision = ""; oItem.Scale = ""; } else if (dr[1].ToString().ToLower() == "float") { oItem.Length = oItem.Precision; oItem.Precision = ""; } if ((dr[1].ToString().ToLower() == "varchar" || dr[1].ToString().ToLower() == "nvarchar" || dr[1].ToString().ToLower() == "varbinary") && dr[2].ToString() == "-1") { oItem.Length = "MAX"; } else if (dr[1].ToString().ToLower() == "text") { oItem.Length = ""; } nCount++; _oTableLists.Add(oItem); } } } } FillGridView(); Cursor.Current = Cursors.Default; watch.Stop(); var elapsedMs = watch.ElapsedMilliseconds / 1000; lblMsg.Text = "Total Time Elapsed :" + CalculateTimeElapsed(elapsedMs); lblMsg.Refresh(); } private string CalculateTimeElapsed(long nTime) { TimeSpan t = TimeSpan.FromSeconds(nTime); string answer = string.Format("{0:D2} h:{1:D2} m:{2:D2} s", t.Hours, t.Minutes, t.Seconds); return answer; } private void FillGridView() { grdList.Rows.Clear(); foreach (TableList li in _oTableLists) { int RowIndex = grdList.Rows.Add(); DataGridViewRow oRow = grdList.Rows[RowIndex]; oRow.Cells[0].Style.Font = new System.Drawing.Font("Microsoft Sans Serif", 8F, System.Drawing.FontStyle.Bold); if (li.ScriptType == EnumScriptType.CreateTable) { oRow.Cells[0].Style.ForeColor = Color.Red; oRow.Cells[1].Style.ForeColor = Color.Red; oRow.Cells[2].Style.ForeColor = Color.Red; oRow.Cells[3].Style.ForeColor = Color.Red; oRow.Cells[4].Style.ForeColor = Color.Red; oRow.Cells[5].Style.ForeColor = Color.Red; oRow.Cells[7].Style.ForeColor = Color.Red; oRow.Cells[8].Style.ForeColor = Color.Red; } else if (li.ScriptType == EnumScriptType.AlterTable) { oRow.Cells[0].Style.ForeColor = Color.Green; oRow.Cells[1].Style.ForeColor = Color.Green; oRow.Cells[2].Style.ForeColor = Color.Green; oRow.Cells[3].Style.ForeColor = Color.Green; oRow.Cells[4].Style.ForeColor = Color.Green; oRow.Cells[5].Style.ForeColor = Color.Green; oRow.Cells[7].Style.ForeColor = Color.Green; oRow.Cells[8].Style.ForeColor = Color.Green; } else if (li.ScriptType == EnumScriptType.AlterColumn) { oRow.Cells[0].Style.ForeColor = Color.Purple; oRow.Cells[1].Style.ForeColor = Color.Purple; oRow.Cells[2].Style.ForeColor = Color.Purple; oRow.Cells[3].Style.ForeColor = Color.Purple; oRow.Cells[4].Style.ForeColor = Color.Purple; oRow.Cells[5].Style.ForeColor = Color.Purple; oRow.Cells[7].Style.ForeColor = Color.Purple; oRow.Cells[8].Style.ForeColor = Color.Purple; } oRow.Cells[0].Value = li.TableName; oRow.Cells[1].Value = li.ColumnName; oRow.Cells[2].Value = li.DataType; oRow.Cells[3].Value = li.Length; oRow.Cells[4].Value = li.AllowNull; oRow.Cells[5].Value = li.DefaultValue; oRow.Cells[6].Value = li.IsDefaultValueRequired ? "Yes" : "No"; oRow.Cells[7].Value = li.Precision; oRow.Cells[8].Value = li.Scale; if (li.IsDefaultValueRequired) { oRow.Cells[6].Style.ForeColor = Color.Blue; oRow.Cells[6].Style.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold); } grdList.Rows[RowIndex].Tag = li; RowIndex++; } } private void checkBox1_CheckedChanged(object sender, EventArgs e) { foreach (ListViewItem li in lsvSourceList.Items) li.Checked = checkBox1.Checked; } private void button1_Click(object sender, EventArgs e) { Clipboard.SetText(rtbText.Text); } private void ExecuteQuery(string sQuery) { try { SqlConnection conn = new SqlConnection(_destinationConnetionString); sQuery = sQuery.Replace("GO", ""); SqlCommand cmd = new SqlCommand(sQuery, conn); conn.Open(); cmd.ExecuteNonQuery(); conn.Close(); } catch (Exception e) { Console.WriteLine("exception occured while creating table:" + e.Message + "\t" + e.GetType()); } } private void btnCreateScript_Click(object sender, EventArgs e) { try { //primary key DataTable dtSource = GePrimaryKeyList(EnumTargetType.Source); DataTable dtDestination = GePrimaryKeyList(EnumTargetType.Destination); //foreign key DataTable dtFKSource = GeForeignKeyList(EnumTargetType.Source); DataTable dtFKDestination = GeForeignKeyList(EnumTargetType.Destination); //default key DataTable dtDefaultKeyDestination = GetDefaultConstraint(EnumTargetType.Destination); StringBuilder sql = new StringBuilder(); StringBuilder errorCheckerMessage = new StringBuilder(); bool isAllDfGiven = false; _oTableLists = new List(); foreach (DataGridViewRow grd in grdList.Rows) { TableList item = (TableList)grd.Tag; item.DefaultValue = grd.Cells[5].Value.ToString(); _oTableLists.Add(item); } foreach (var item in _oTableLists) { if (item.IsDefaultValueRequired) { if (String.IsNullOrEmpty(item.DefaultValue)) { isAllDfGiven = true; errorCheckerMessage.AppendFormat("Table: {0}, Col Name: {1}", item.TableName, item.ColumnName); errorCheckerMessage.AppendFormat("\r\n"); } } } if (isAllDfGiven == true) { StringBuilder errorMessage = new StringBuilder(); errorMessage.AppendFormat("Default Values Required: "); errorMessage.AppendFormat("\r\n"); errorMessage.AppendFormat(errorCheckerMessage.ToString()); Form2 form = new Form2(); form.ShowDialog(errorMessage.ToString()); return; } _dtIdentityColumns = GetIdentityColumnList(EnumTargetType.Source); List _oTempCreateTableNames = _oTableLists.Where(x => x.ScriptType == EnumScriptType.CreateTable).Select(y => y.TableName).Distinct().ToList(); List _oTempAlterTableNames = _oTableLists.Where(x => x.ScriptType == EnumScriptType.AlterTable).Select(y => y.TableName).Distinct().ToList(); List _oTempAlterTableAlterColNames = _oTableLists.Where(x => x.ScriptType == EnumScriptType.AlterColumn).Select(y => y.TableName).Distinct().ToList(); //create table script sql.AppendFormat("\r\n\r\n"); sql.AppendFormat("-------------- Create Table ------------------------------------\r\n\r\n"); foreach (var item in _oTempCreateTableNames) { var tempTable = _oTableLists.Where(x => x.TableName == item && x.ScriptType == EnumScriptType.CreateTable).ToList(); string pkCol = null; string pkConstraint = null; foreach (DataRow dr in dtSource.Rows) { if (item.ToLower() == dr[0].ToString().ToLower()) { pkCol = dr[1].ToString(); pkConstraint = dr[2].ToString(); } } sql.AppendFormat("CREATE TABLE [{0}]\r\n(\r\n", item); int i = 0; string snip = ""; foreach (var row in tempTable) { snip = GetColumnSqlCREATE(row); sql.AppendFormat((i < tempTable.Count - 1) ? snip.ToString() : snip.ToString().TrimEnd(',', '\r', '\n')); ++i; } if (pkCol != null) { var pkColumnExist = tempTable.Where(x => x.ColumnName.ToLower() == pkCol.ToLower()).Any(); if (pkColumnExist == true) { sql.AppendFormat(","); sql.AppendFormat("\r\n"); sql.AppendFormat("\t CONSTRAINT {0} PRIMARY KEY ({1})", pkConstraint, pkCol); } } sql.AppendFormat("\r\n)"); sql.AppendFormat("\r\n"); } //Alter Table script sql.AppendFormat("\r\n\r\n"); sql.AppendFormat("-------------- Alter Table ------------------------------------\r\n\r\n"); foreach (var item in _oTempAlterTableNames) { var tempTable = _oTableLists.Where(x => x.TableName == item && x.ScriptType == EnumScriptType.AlterTable).ToList(); string pkCol = null; string pkConstraint = null; foreach (DataRow dr in dtSource.Rows) { if (item.ToLower() == dr[0].ToString().ToLower()) { pkCol = dr[1].ToString(); pkConstraint = dr[2].ToString(); } } sql.AppendFormat("ALTER TABLE [{0}]\r\n ADD", item); int i = 0; string snip = ""; foreach (var row in tempTable) { snip = GetColumnSqlALTER(row); sql.AppendFormat((i < tempTable.Count - 1) ? snip : snip.Substring(0, snip.LastIndexOf(',')) + ";" + snip.Substring(snip.LastIndexOf(',') + 1)); ++i; } if (pkCol != null) { var pkColumnAlreadyExist = dtDestination.AsEnumerable().Where(x => x[0].ToString().ToLower() == item.ToLower()).Any(); var pkColumnExist = dtDestination.AsEnumerable().Where(x => x[0].ToString().ToLower() == item.ToLower() && x[1].ToString().ToLower() == pkCol.ToLower()).Any(); if (pkColumnAlreadyExist == false && pkColumnExist == false) { var text = sql.ToString().Substring(0, sql.ToString().LastIndexOf(';')) + "," + sql.ToString().Substring(sql.ToString().LastIndexOf(';') + 1); sql = new StringBuilder(); sql.AppendFormat(text); // sql.AppendFormat("\r\n"); sql.AppendFormat("CONSTRAINT {0} PRIMARY KEY ({1})", pkConstraint, pkCol); sql.AppendFormat(";"); } } sql.AppendFormat("\r\n"); sql.AppendFormat("\r\n"); } //Alter col script sql.AppendFormat("\r\n\r\n"); sql.AppendFormat("-------------- Alter Column ------------------------------------\r\n\r\n"); foreach (var item in _oTempAlterTableAlterColNames) { var tempTable = _oTableLists.Where(x => x.TableName == item && x.ScriptType == EnumScriptType.AlterColumn).ToList(); string pkCol = null; string pkConstraint = null; foreach (DataRow dr in dtSource.Rows) { if (item.ToLower() == dr[0].ToString().ToLower()) { pkCol = dr[1].ToString(); pkConstraint = dr[2].ToString(); } } int i = 0; foreach (var row in tempTable) { //update if convert to null to not null if (row.AllowNull.ToLower() == "no") { if (row.ColumnName.ToLower() == "userid" || row.ColumnName.ToLower() == "createdby" || row.ColumnName.ToLower() == "payrolltypeid" || row.ColumnName.ToLower() == "createddate") { if (row.IsDefaultValueRequired || !String.IsNullOrEmpty(row.DefaultValue)) { row.DefaultValue = DefaultValueSet(row.DefaultValue, row.ColumnName); sql.AppendFormat("UPDATE {0} SET {1}={2} WHERE {3} IS NULL ", row.TableName, row.ColumnName, row.ColumnName.ToLower() == "createddate" ? (row.DefaultValue.ToLower() == "getdate()" ? row.DefaultValue : "'" + row.DefaultValue + "'") : row.DefaultValue, row.ColumnName); sql.AppendFormat("\r\n"); } } else { if (row.IsDefaultValueRequired || !String.IsNullOrEmpty(row.DefaultValue)) { row.DefaultValue = DefValueBracesCheck(row.DefaultValue); if (row.DataType.ToLower() == "int" || row.DataType.ToLower() == "money" || row.DataType.ToLower() == "numeric" || row.DataType.ToLower() == "decimal" || row.DefaultValue == "tinyint") { var fkForeignKeyExist = dtFKDestination.AsEnumerable().Where(x => x[1].ToString().ToLower() == item.ToLower() && x[2].ToString().ToLower() == row.ColumnName.ToLower()).Any(); if (fkForeignKeyExist == true) { sql.AppendFormat("UPDATE {0} SET {1}=1 WHERE {2} IS NULL ", row.TableName, row.ColumnName, row.ColumnName); } else { sql.AppendFormat("UPDATE {0} SET {1}=0 WHERE {2} IS NULL ", row.TableName, row.ColumnName, row.ColumnName); } } if (row.DataType.ToLower() == "bit" || row.DataType.ToLower() == "smallint") { sql.AppendFormat("UPDATE {0} SET {1}=0 WHERE {2} IS NULL ", row.TableName, row.ColumnName, row.ColumnName); } sql.AppendFormat("\r\n"); } } } ExistingDefaultConstraintCheck(dtDefaultKeyDestination, sql, row); sql.AppendFormat("ALTER TABLE [{0}] ALTER COLUMN [{1}] [{2}] {3} {4} {5} ", row.TableName, row.ColumnName, row.DataType, (HasLength(row.DataType)) ? "(" + row.Length.ToString() + ")" : string.Empty, (HasPrecisionAndScale(row.DataType)) ? ((row.Precision != null && row.Scale != null) ? "(" + row.Precision + "," + row.Scale + ")" : string.Empty) : string.Empty, (row.AllowNull.ToLower() == "yes") ? "NULL" : "NOT NULL" ); sql.AppendFormat(";\r\n"); //def value append DefaultValueAppendAlterColumn(row, sql); ++i; } if (pkCol != null) { var pkAlreadyColumnExist = dtDestination.AsEnumerable().Where(x => x[0].ToString().ToLower() == item.ToLower()).Any(); var pkColumnExist = dtDestination.AsEnumerable().Where(x => x[0].ToString().ToLower() == item.ToLower() && x[1].ToString().ToLower() == pkCol.ToLower()).Any(); if (pkAlreadyColumnExist == false && pkColumnExist == false) { sql.AppendFormat("ALTER TABLE [{0}] ADD CONSTRAINT [{1}] PRIMARY KEY ({2})", item, pkConstraint, pkCol); sql.AppendFormat(";"); } } sql.AppendFormat("\r\n"); sql.AppendFormat("\r\n"); } //foreign key sql.AppendFormat("\r\n\r\n"); sql.AppendFormat("-------------- Foreign key ------------------------------------\r\n\r\n"); ForeignKeyCreate(dtFKSource, sql, dtFKDestination); #region Misc script sql.AppendFormat("\r\n\r\n"); sql.AppendFormat("update users set usertype = 0 where userid in ( -9,-8)"); sql.AppendFormat("\r\n\r\n"); sql.AppendFormat("update userrole set EVENTDATE ='1 Jan 2023'"); sql.AppendFormat("\r\n\r\n"); sql.AppendFormat("update employee set persontype =0 where persontype is null"); sql.AppendFormat("\r\n\r\n"); sql.AppendFormat(@"CREATE VIEW BankInformation AS SELECT employeeid, bn.NAME BANK, e.ACCOUNTNO FROM EMPLOYEE e, BRANCHES brn, BANKS bn WHERE e.BRANCHID = brn.BRANCHID AND brn.BANKID = bn.BANKID GO"); sql.AppendFormat("\r\n\r\n"); sql.AppendFormat(@"CREATE VIEW VW_EMPDigitalServiceBook AS SELECT E.EMPLOYEEID, E.EMPLOYEENO, E.BENGALINAME AS NAME, E.FATHERNAME, E.MOTHERNAME, ES.NAME AS SPOUSENAME, E.JOININGDATE, E.EMPLOYEESTATUS, DES.NAMEINBANGLA AS DESIGNATION, EC.PARMANENTADDRESS AS PARMANENTADDRESS, EC.PRESENTADDRESS AS PRESENTADDRESS, EC.PERMANENTPOSTOFFICE AS POSTOFFICE, EC.PERMANENTPOSTCODENO AS POSTCODENO, EC.PERMANENTVILLAGE AS VILLAGE, EC.PERMANENTROADNO AS ROADNO, EC.PERMANENTWARDNO AS WARDNO, E.BIRTHDATE AS BIRTHDATE, E.PHOTOPATH AS PHOTO, E.NATIONALID AS NIDNO, E.HEIGHT AS HEIGHT, E.BLOODGROUP AS BLOODGROUP, E.EMPSIGNATURE AS EMPSIGNATURE, LM.EMPSIGNATURE AS LMSIGNATURE, LMDES.NAMEINBANGLA AS LMDESIGNATION, EL.DESCRIPTION AS EDUCATIONLEVEL FROM EMPLOYEE E LEFT JOIN EMPCONTACT EC ON E.EMPLOYEEID = EC.EMPLOYEEID LEFT JOIN DESIGNATION DES ON E.DEPARTMENTID = DES.DESIGNATIONID LEFT JOIN DISTRICT DIS ON DIS.DISTRICTID = EC.PARMANENTDISTRICTID LEFT JOIN THANA T ON T.THANAID = EC.PARMANENTTHANAID LEFT JOIN EMPSPOUSE ES ON E.EMPLOYEEID = ES.EMPLOYEEID LEFT JOIN EMPLOYEE LM ON E.LINEMANAGERID = E.EMPLOYEEID LEFT JOIN DESIGNATION LMDES ON LMDES.DESIGNATIONID = LM.DESIGNATIONID LEFT JOIN EMPACADEMIC EA ON E.EMPLOYEEID = EA.EMPLOYEEID LEFT JOIN EDUCATIONLEVEL EL ON EA.EDUCATIONLEVELID = EL.EDUCATIONLEVELID GO"); sql.AppendFormat("\r\n\r\n"); sql.AppendFormat(@"CREATE VIEW VW_EmployeeAcademicInfo as SELECT e.employeeId AS EmployeeId, e.employeeNo AS EmployeeNo, e.name AS EmployeeName, a.institutename AS InstituteName, (SELECT description FROM EDUCATIONTYPE WHERE a.EDUCATIONTYPEID = EDUCATIONTYPEID) AS EducationType, (SELECT description FROM EDUCATIONLEVEL WHERE a.educationlevelId = educationlevelId) AS EducationLevel, (SELECT description FROM DISCIPLINE WHERE a.disciplineId = disciplineId) AS Discipline, (SELECT name FROM INSTITUTION WHERE a.institutionid=INSTITUTIONID) AS Institute, a.passingYear AS PassingYear, (SELECT DESCRIPTION FROM RESULTTYPE WHERE RESULTTYPEID=a.resulttypeid) AS ResultType FROM EMPACADEMIC a LEFT JOIN EMPLOYEE e ON a.EMPLOYEEID=e.EMPLOYEEID GO"); sql.AppendFormat("\r\n\r\n"); sql.AppendFormat(@"CREATE VIEW VW_EMPLOYEEBASIC AS Select E.EmployeeId,E.EMPLOYEENO,E.NAME,E.BASICSALARY,E.GrossSalary,E.TAXAMOUNT, E.Fathername, occf.Description AS FatherOccupation, occm.Description AS MotherOccupation, E.MotherName, E.PhotoPath AS Photo, ( case E.GENDER When 1 Then 'Male' When 2 Then 'Female' When 3 Then 'Both' Else 'None' End)As Gender, E.BIRTHDATE, E.BIRTHPlace, E.TINNO,E.JOININGDATE,E.EMAILADDRESS, Ca.DESCRIPTION as Category,L.DESCRIPTION as Location, (Case E.STATUS When 1 Then 'Active' When 2 Then 'InActive' Else 'Regardless' End) As Status, (case dept5.tire when 5 then dept1.DESCRIPTION when 4 then dept2.DESCRIPTION when 3 then dept3.DESCRIPTION when 2 then dept4.DESCRIPTION when 1 then dept5.DESCRIPTION Else '' End) As Division, (case dept5.tire when 5 then dept1.DEPARTMENTID when 4 then dept2.DEPARTMENTID when 3 then dept3.DEPARTMENTID when 2 then dept4.DEPARTMENTID when 1 then dept5.DEPARTMENTID End) As DivisionID, case dept5.tire when 5 THEN dept2.DESCRIPTION when 4 then dept3.DESCRIPTION when 3 then dept4.DESCRIPTION when 2 then dept5.DESCRIPTION Else '' End As Company, (case dept5.tire when 5 THEN dept2.DEPARTMENTID when 4 then dept3.DEPARTMENTID when 3 then dept4.DEPARTMENTID when 2 then dept5.DEPARTMENTID End) As CompanyID, (case dept5.tire when 5 then dept3.DESCRIPTION when 4 then dept4.DESCRIPTION when 3 then dept5.DESCRIPTION when 2 then '' Else '' End) As Department, (case dept5.tire when 5 then dept3.DEPARTMENTID when 4 then dept4.DEPARTMENTID when 3 then dept5.DEPARTMENTID End) As DepartmentID, (case dept5.tire when 5 then dept4.DESCRIPTION when 4 then dept5.DESCRIPTION when 3 then '' when 2 then '' Else '' End) As Section, (case dept5.tire when 5 then dept4.DEPARTMENTID when 4 then dept5.DEPARTMENTID End) As SectionID, (case dept5.tire when 5 then dept5.DESCRIPTION when 4 then '' when 3 then '' when 2 then '' Else '' End) As SubSection, (case dept5.tire when 5 then dept5.DEPARTMENTID End) As SubSectionID, Deg.NAME as DESIGNATION,Gr.DESCRIPTION as GRADE, R.Name AS RELIGION, (case E.MARITALSTATUSID When 1 Then 'Married' When 2 Then 'Unmarried' When 3 Then 'Divorced' When 4 Then 'Widow' Else 'None' End) As MaritalStatus , E.MOBILENO,E.VendorCode,E.DATEOFCONFIRMATION,E.NATIONALID,E.PassPortNo,E.PhotoPath,E.bloodgroup, lmemp.EMPLOYEEID AS LineManagerID, lmemp.EmployeeNo AS LineManagerNo,lmemp.Name AS LineManagerName,lmDeg.Name AS LineManagerDes, (case lmDEp.tire when 4 then lmdept1.DESCRIPTION when 3 then lmdept2.DESCRIPTION when 2 then lmdept3.DESCRIPTION when 1 then lmDEp.DESCRIPTION Else '' End) As lmDivision, (case lmDEp.tire when 4 THEN lmdept1.DEPARTMENTID when 3 then lmdept2.DEPARTMENTID when 2 THEN lmdept3.DEPARTMENTID when 1 then lmDEp.DEPARTMENTID End) As lmDivisionID, case lmDEp.tire when 4 THEN lmdept2.DESCRIPTION when 3 then lmdept3.DESCRIPTION when 2 then lmDEp.DESCRIPTION Else '' End As lmDepartment, (case lmDEp.tire when 4 then lmdept2.DepartmentID when 3 then lmdept3.DepartmentID when 2 then lmDEp.DepartmentID End) As lmDepartmentID, (case lmDEp.tire when 4 then lmdept3.DESCRIPTION when 3 then lmDEp.DESCRIPTION when 2 then '' Else '' End) As lmUnit, (case lmDEp.tire when 4 then lmdept3.DepartmentID when 3 then lmDEp.DepartmentID End) As lmUnitID, (case lmDEp.tire when 4 then lmDEp.DESCRIPTION when 3 then '' when 2 then '' Else '' End) As lmSubUnit, (case lmDEp.tire when 4 then lmDEp.DepartmentID End) As lmSubUnitID, (case E.IsConfirmed When 0 Then 'Probetionary' When 1 Then 'Confirmed' Else 'Regardless' End)As EmpStatus, cg.Code AS costcenter, nt.DESCRIPTION AS NATIONALITY,BK.NAME Bank,BR.NAME Branch,BKOUT.NAME OUTPayBank,BROUT.NAME OUTPayBranch, E.ACCOUNTNO,E.OutPayAccountNo from Employee E Left outer join CATEGORY Ca on E.CATEGORYID = Ca.CATEGORYID LEFT JOIN DEPARTMENT dept5 ON dept5.DEPARTMENTID = E.DEPARTMENTID LEFT JOIN DEPARTMENT dept4 ON dept4.DEPARTMENTID = dept5.PARENTID LEFT JOIN DEPARTMENT dept3 ON dept3.DEPARTMENTID = dept4.PARENTID LEFT JOIN DEPARTMENT dept2 ON dept2.DEPARTMENTID = dept3.PARENTID LEFT JOIN DEPARTMENT dept1 ON dept1.DEPARTMENTID = dept2.PARENTID Left outer join DESIGNATION Deg on E.DESIGNATIONID = Deg.DESIGNATIONID Left outer join GRADES Gr on E.GRADEID = Gr.GRADEID Left Outer Join LOCATION L on E.LOCATIONID = L.LOCATIONID Left Outer Join RELIGION R on E.RELIGIONID = R.RELIGIONID LEFT OUTER JOIN EMPCOSTCENTER ec ON ec.EMPLOYEEID = e.EMPLOYEEID AND ec.CURRENTCC = 1 LEFT OUTER JOIN CRG cg ON cg.CRGID = ec.COSTCENTERID LEFT OUTER JOIN NATIONALITY nt ON nt.NATIONALITYID = e.NATIONALITYID LEFT OUTER JOIN OCCUPATION occf ON occf.OCCUPATIONID = e.FATHEROCCUPATIONID LEFT OUTER JOIN OCCUPATION occm ON occm.OCCUPATIONID = e.MOTHEROCCUPATIONID LEFT OUTER JOIN EMPLOYEE lmemp ON lmemp.Employeeid = e.linemanagerid LEFT OUTER JOIN ORGANEMPLOYEE orge ON orge.EMPLOYEEID = e.EMPLOYEEID LEFT OUTER JOIN ORGANOGRAM org ON org.ORGANOGRAMID = orge.NODEID LEFT OUTER JOIN ORGANEMPLOYEE orgel ON orgel.NODEID = org.PARENTID LEFT OUTER JOIN EMPLOYEE em ON em.EMPLOYEEID = orgel.EMPLOYEEID Left outer join DESIGNATION lmDeg on lmemp.DESIGNATIONID = lmDeg.DESIGNATIONID Left JOIN DEPARTMENT lmDEp ON lmDEp.DEPARTMENTID = lmemp.DEPARTMENTID LEFT JOIN DEPARTMENT lmdept3 ON lmdept3.DEPARTMENTID = lmDEp.PARENTID LEFT JOIN DEPARTMENT lmdept2 ON lmdept2.DEPARTMENTID = lmdept3.PARENTID LEFT JOIN DEPARTMENT lmdept1 ON lmdept1.DEPARTMENTID = lmdept2.PARENTID LEFT OUTER JOIN Branches BR ON E.BRANCHID=BR.BRANCHID LEFT OUTER JOIN BANKS BK ON BK.BANKID=BR.BANKID LEFT OUTER JOIN Branches BROUT ON E.OUTPayBRANCHID=BROUT.BRANCHID LEFT OUTER JOIN BANKS BKOUT ON BKOUT.BANKID=BROUT.BANKID GO"); sql.AppendFormat("\r\n\r\n"); sql.AppendFormat(@"CREATE VIEW VW_EmployeeChildrenInfo AS SELECT e.employeeid AS EmployeeId, e.employeeNo AS EmployeeNo, e.name AS EmployeeName, c.NAME, ( CASE WHEN c.gender = 1 THEN 'Male' WHEN c.gender = 2 THEN 'Female' WHEN c.gender = 3 THEN 'Other' ELSE '' END ) 'Gender', c.BIRTHDATE AS BirthDate, ( CASE WHEN c.MARITALSTATUS = 1 THEN 'Married' WHEN c.MARITALSTATUS = 2 THEN 'Unmarried' WHEN c.MARITALSTATUS = 3 THEN 'Divorced' WHEN c.MARITALSTATUS = 4 THEN 'Widow' ELSE '' END ) 'MaritalStatus', (SELECT description FROM OCCUPATION WHERE OCCUPATIONID=c.occupationId)AS Occupation, c.passportNo AS PassportNo, c.passportIssueDate AS PassportIssueDate, c.PassportExpDate AS PassportExpDate, c.nid, (SELECT description FROM EDUCATIONLEVEL WHERE EDUCATIONLEVELID = c.educationLevelId) AS EducationLevel, c.InsuranceId, c.InclusionDate FROM EMPCHILDREN c LEFT JOIN EMPLOYEE e ON c.employeeid = e.employeeId GO"); sql.AppendFormat("\r\n\r\n"); sql.AppendFormat(@"CREATE VIEW VW_EmployeeContactInfo AS SELECT e.EMPLOYEEID AS EmployeeId, e.EMPLOYEENO AS EmployeeNo, e.NAME, c.PARMANENTADDRESS AS 'PermanentAddress', (SELECT name FROM DISTRICT WHERE DISTRICTID = c.PARMANENTDISTRICTID ) AS 'PermanentDistrict', (SELECT name FROM Thana WHERE ThanaId = c.PARMANENTTHANAID ) AS 'PermanentThana', c.PARMANENTTELEPHONE AS 'PermanentTelephone', c.PARMANENTMOBILE AS 'PermanentMobile', c.PRESENTADDRESS AS 'PresentAddress', (SELECT name FROM DISTRICT WHERE DISTRICTID = c.PresentDISTRICTID ) AS 'PresentDistrict', (SELECT name FROM Thana WHERE ThanaId = c.PresentTHANAID ) AS 'PresentThana', c.PresentTELEPHONE AS 'PresentTelephone', c.PRESENTMOBILE AS 'PresentMobile', c.EMERGENCYCONTACTADDRESS AS 'EmergencyContactAddress', c.EMERGENCYCONTACTPERSON AS 'EmergencyContactPerson', c.EMERGENCYTELEPHONE AS 'EmergencyTelephone' FROM EMPCONTACT c LEFT JOIN EMPLOYEE e ON e.EMPLOYEEID = c.EMPLOYEEID; GO"); sql.AppendFormat("\r\n\r\n"); sql.AppendFormat(@"Create view VW_EmployeeGenderRatioData as WITH CTE AS ( select d3.DepartmentID SectionId, d3.DESCRIPTION Section, d2.departmentId departmentId, d2.DESCRIPTION Department, d1.departmentId DivisionId, d1.DESCRIPTION Division from department d3 LEFT JOIN department d2 ON d3.PARENTID=d2.DEPARTMENTID LEFT JOIN department d1 ON d2.PARENTID=d1.DEPARTMENTID ) SELECT e.EMPLOYEEID AS EmployeeId, e.CATEGORYID AS categoryId, c.DESCRIPTION AS Category, e.DESIGNATIONID AS designationId, dg.NAME AS Designation, e.GRADEID AS GradeId, g.DESCRIPTION AS Grade, e.RELIGIONID AS ReligionId, r.NAME AS Religion, e.departmentId AS sectionId, dept.Section AS Section, dept.departmentId, dept.Department, dept.DivisionId, dept.Division, ( CASE WHEN e.gender = 1 THEN 'Male' WHEN e.gender = 2 THEN 'Female' WHEN e.gender = 3 THEN 'Other' ELSE '' END ) Gender FROM employee e LEFT JOIN CATEGORY c ON e.CATEGORYID=c.CATEGORYID LEFT JOIN DESIGNATION dg ON e.DESIGNATIONID=dg.DESIGNATIONID LEFT JOIN GRADES g ON e.GRADEID=g.GRADEID LEFT JOIN RELIGION r ON r.RELIGIONID=e.RELIGIONID LEFT JOIN CTE dept ON dept.sectionId=e.DEPARTMENTID GO"); sql.AppendFormat("\r\n\r\n"); sql.AppendFormat(@"CREATE VIEW VW_EmployeeGeneralData AS SELECT e.EMPLOYEEID, e.EMPLOYEENO, e.FIRSTNAME, e.LASTNAME, e.name AS 'FullName', e.ExtraField1 AS 'EmployeeDName', e.JOININGDATE, e.BIRTHDATE, (SELECT name FROM DESIGNATION WHERE DESIGNATIONID = e.employeeid) AS 'Designation', (SELECT DESCRIPTION FROM GRADES WHERE GRADEID = e.employeeid) AS 'Grade', ( CASE WHEN e.MARITALSTATUSID = 1 THEN 'Married' WHEN e.MARITALSTATUSID = 2 THEN 'Unmarried' WHEN e.MARITALSTATUSID = 3 THEN 'Divorced' WHEN e.MARITALSTATUSID = 4 THEN 'Widow' ELSE '' END ) 'MaritalStatus', ( CASE WHEN e.gender = 1 THEN 'Male' WHEN e.gender = 2 THEN 'Female' WHEN e.gender = 3 THEN 'Other' ELSE '' END ) 'Gender', ( CASE WHEN e.BLOODGROUP = 1 THEN 'A+' WHEN e.BLOODGROUP = 2 THEN 'A-' WHEN e.BLOODGROUP = 3 THEN 'B+' WHEN e.BLOODGROUP = 4 THEN 'B-' WHEN e.BLOODGROUP = 5 THEN 'O+' WHEN e.BLOODGROUP = 6 THEN 'O-' WHEN e.BLOODGROUP = 7 THEN 'AB+' WHEN e.BLOODGROUP = 8 THEN 'AB-' ELSE '' END ) 'BloodGroup', (SELECT description FROM CATEGORY c WHERE c.CATEGORYID = e.categoryid ) AS 'Category', (SELECT employeeNo+'-'+name FROM EMPLOYEE WHERE employeeid = e.lineManagerId) AS 'LineManager', e.emailAddress, e.mobileno, (SELECT name FROM RELIGION WHERE RELIGIONID = e.religionId) AS 'Religion', (SELECT description FROM NATIONALITY WHERE NATIONALITYID = e.nationalityId) AS NATIONALITY, e.geid AS 'EmpCode', e.NATIONALID AS 'NID', e.TINNO AS 'TIN', e.DRIVINGLICENCENO AS 'DrivingLicenceNo', e.BirthPlace AS 'BirthPlace', e.passportNo AS 'PassportNo', e.PASSPORTISSUEDATE AS 'PassportIssueDate', e.PASSPORTEXPDATE AS 'PassportExpireDate', ( CASE WHEN e.extraField2 = 1 THEN 'Dhaka' WHEN e.extraField2 = 2 THEN 'Other' ELSE '' END ) 'BaseStation', e.insuranceId AS 'InsuranceId', e.fatherName AS 'FatherName', (SELECT description FROM OCCUPATION WHERE OCCUPATIONID = e.fatherOccupationId) AS 'FatherOccupation', e.motherName AS 'MotherName', (SELECT description FROM OCCUPATION WHERE OCCUPATIONID = e.motherOccupationId) AS 'MotherOccupation', e.extraField3 AS 'TypeName', e.vendorCode AS 'VendorCode', e.extrafield4 AS 'MinValue', e.extrafield5 AS 'MaxValue' FROM EMPLOYEE e; GO"); sql.AppendFormat("\r\n\r\n"); sql.AppendFormat(@"CREATE VIEW dbo.vw_EmployeeImportantInfo AS SELECT E.EmployeeID, E.EmployeeNo, E.Name, E.TINNO, E.JoiningDate, E.BasicSalary, e.GROSSSALARY, e.[STATUS], e.BloodGroup, G.GRADEID, IsNull(G.DESCRIPTION, '') AS GradeName, IsNULL(G.CODE, '') AS GCode, IsNull(G.SequenceNo, 0) AS SequenceNo, D .DESIGNATIONID, IsNUll(D .NAME, '') AS [Designation] , E.PaymentMode, 'PaymentModeName' = CASE WHEN E.PaymentMode = 1 THEN 'Cash' ELSE 'Bank' END, ISNULL(E.ACCOUNTNO, '') AS ACCOUNTNO, E.BRANCHID, ISNULL(BR.NAME, '') AS BranchName, BA.BANKID, ISNULL(Ba.NAME, '') AS BankName, E.OUTPAYACCOUNTNO, E.OUTPAYBRANCHID, ISNULL(BRO.Name, '') AS OutPayBranchName, BAO.BankID AS OUTPAYBANKID, ISNULL(BAO.NAME, '') AS OUTPAYBankName, E.CardID, (SELECT CardNumber FROM AccessCard WHERE AccessCardId = E.CardId) AS [RFNumber], e.NationalID, n.[DESCRIPTION] AS Nationality, e.EMAILADDRESS, e.MOBILENO, e.FATHERNAME, e.MOTHERNAME, e.BIRTHDATE, rl.NAME AS Religion, e.MARITALSTATUSID, e.GENDER AS GenderID, ec.PRESENTADDRESS, ec.PARMANENTADDRESS, ec.PERSONALTELEPHONE, d2.NAME AS ParmanentDistric, d3.NAME AS TempDistric, t1.NAME AS TempThana,ec.PERSONALEMAIL, ec.OFFICIALEMAIL, ec.EMERGENCYTELEPHONE, ec.EMERGENCYMOBILE, ec.FAX, t2.NAME AS ParmanentThana, e3.[DESCRIPTION] AS EducationLevel, e2.PASSINGYEAR, MIN(gs.GROSSSALARY) AS JoiningSalary, MIN(gs.EFFECTDATE) AS EffectedDate, e.PhotoPath, e.EMPSIGNATURE, 'Divission' = CASE WHEN dept5.tire = 5 THEN ISNULL(dept1.[DESCRIPTION], '') WHEN dept5.tire = 4 THEN ISNULL(dept2.[DESCRIPTION], '') WHEN dept5.tire = 3 THEN ISNULL(dept3.[DESCRIPTION], '') WHEN dept5.tire = 2 THEN ISNULL(dept4.[DESCRIPTION], '') WHEN dept5.tire = 1 THEN ISNULL(dept5.[DESCRIPTION], '') END, 'DivissionID' = CASE WHEN dept5.tire = 5 THEN dept1.DEPARTMENTID WHEN dept5.tire = 4 THEN dept2.DEPARTMENTID WHEN dept5.tire = 3 THEN dept3.DEPARTMENTID WHEN dept5.tire = 2 THEN dept4.DEPARTMENTID WHEN dept5.tire = 1 THEN dept1.DEPARTMENTID END, 'Unit' = CASE WHEN dept5.tire = 3 THEN ISNULL(dept3.[DESCRIPTION], '') WHEN dept5.tire = 2 THEN ISNULL(dept4.[DESCRIPTION], '') WHEN dept5.tire = 1 THEN ISNULL(dept5.[DESCRIPTION], '') END, 'Department' = CASE WHEN dept5.tire = 5 THEN ISNULL(dept2.[DESCRIPTION], '') WHEN dept5.tire = 4 THEN ISNULL(dept3.[DESCRIPTION], '') WHEN dept5.tire = 3 THEN ISNULL(dept4.[DESCRIPTION], '') WHEN dept5.tire = 2 THEN ISNULL(dept5.[DESCRIPTION], '') END, 'FunctionalUnit' = CASE WHEN dept5.tire = 3 THEN ISNULL(dept5.[DESCRIPTION], '') END, 'DepartmentID' = CASE WHEN dept5.tire = 5 THEN dept2.DepartmentID WHEN dept5.tire = 4 THEN dept3.DepartmentID WHEN dept5.tire = 3 THEN dept4.DepartmentID WHEN dept5.tire = 2 THEN dept5.DepartmentID END, 'Floor' = CASE WHEN dept5.tire = 5 THEN ISNULL(dept3.[DESCRIPTION], '') WHEN dept5.tire = 4 THEN ISNULL(dept4.[DESCRIPTION], '') WHEN dept5.tire = 3 THEN ISNULL(dept5.[DESCRIPTION], '') WHEN dept5.tire = 2 THEN '' END, 'FloorID' = CASE WHEN dept5.tire = 5 THEN dept3.DepartmentID WHEN dept5.tire = 4 THEN dept4.DepartmentID WHEN dept5.tire = 3 THEN dept5.DepartmentID WHEN dept5.tire = 2 THEN '' END, 'Section' = CASE WHEN dept5.tire = 5 THEN ISNULL(dept4.[DESCRIPTION], '') WHEN dept5.tire = 4 THEN ISNULL(dept5.[DESCRIPTION], '') WHEN dept5.tire = 3 THEN '' WHEN dept5.tire = 2 THEN '' END, 'SectionID' = CASE WHEN dept5.tire = 5 THEN dept4.DepartmentID WHEN dept5.tire = 4 THEN dept5.DepartmentID WHEN dept5.tire = 3 THEN '' WHEN dept5.tire = 2 THEN '' END, 'Line' = CASE WHEN dept5.tire = 5 THEN ISNULL(dept5.[DESCRIPTION], '') WHEN dept5.tire = 4 THEN '' WHEN dept5.tire = 3 THEN '' WHEN dept5.tire = 2 THEN '' END, 'LineID' = CASE WHEN dept5.tire = 5 THEN dept5.DepartmentID WHEN dept5.tire = 4 THEN '' WHEN dept5.tire = 3 THEN '' WHEN dept5.tire = 2 THEN '' END FROM Employee E LEFT JOIN DESIGNATION D ON D .DESIGNATIONID = E.DESIGNATIONID LEFT JOIN Grades G ON E.GRADEID = G.GRADEID LEFT JOIN BRANCHES BR ON E.BRANCHID = BR.BRANCHID LEFT JOIN BANKS BA ON BR.BANKID = BA.BANKID LEFT JOIN BRANCHES BRO ON E.OUTPAYBRANCHID = BRO.BRANCHID LEFT JOIN BANKS BAO ON BRO.BANKID = BAO.BANKID LEFT JOIN RELIGION AS rl ON rl.RELIGIONID = e.RELIGIONID LEFT JOIN EMPCONTACT AS Ec ON ec.EMPLOYEEID = e.EMPLOYEEID LEFT JOIN DISTRICT AS d2 ON d2.DISTRICTID = ec.PARMANENTDISTRICTID LEFT JOIN DISTRICT AS d3 ON d3.DISTRICTID = ec.PRESENTDISTRICTID LEFT JOIN THANA AS t1 ON t1.THANAID = ec.PRESENTTHANAID LEFT JOIN THANA AS t2 ON t2.THANAID = ec.PARMANENTTHANAID LEFT JOIN (SELECT * FROM (SELECT EmployeeID, ROW_NUMBER() OVER (PARTITION BY EMPLOYEEID ORDER BY EMPLOYEEID, LastLevel DESC, PassingYear DESC) Sl, PassingYear, LastLevel, EDUCATIONLEVELID FROM EMPACADEMIC GROUP BY EMPLOYEEID, LastLevel, PassingYear, EDUCATIONLEVELID) a WHERE Sl = 1) AS e2 ON e2.EMPLOYEEID = e.EMPLOYEEID LEFT JOIN GRADESALARYASSIGNMENT AS gs ON gs.EMPLOYEEID = e.EMPLOYEEID LEFT JOIN EDUCATIONLEVEL AS e3 ON e3.EDUCATIONLEVELID = e2.EDUCATIONLEVELID LEFT JOIN NATIONALITY AS n ON n.NATIONALITYID = e.NATIONALITYID LEFT JOIN DEPARTMENT dept5 ON dept5.DEPARTMENTID = E.DEPARTMENTID LEFT JOIN DEPARTMENT dept4 ON dept4.DEPARTMENTID = dept5.PARENTID LEFT JOIN DEPARTMENT dept3 ON dept3.DEPARTMENTID = dept4.PARENTID LEFT JOIN DEPARTMENT dept2 ON dept2.DEPARTMENTID = dept3.PARENTID LEFT JOIN DEPARTMENT dept1 ON dept1.DEPARTMENTID = dept2.PARENTID GROUP BY E.EmployeeID, E.EmployeeNo, E.Name, E.TINNO, E.JoiningDate, E.BasicSalary, e.GROSSSALARY, e.[STATUS], e.BloodGroup, G.GRADEID, G.DESCRIPTION, G.CODE, G.SequenceNo, D .DESIGNATIONID, D .NAME, E.PaymentMode, E.ACCOUNTNO, E.BRANCHID, BR.NAME, BA.BANKID, BA.NAME, E.OUTPAYACCOUNTNO, E.OUTPAYBRANCHID, BRO.Name, BAO.BankID, BAO.NAME, E.CardID, e.NationalID, n.[DESCRIPTION], e.EMAILADDRESS, e.MOBILENO, e.FATHERNAME, e.MOTHERNAME, e.BIRTHDATE, rl.NAME, e.MARITALSTATUSID, e.GENDER, ec.PRESENTADDRESS, ec.PARMANENTADDRESS, ec.PERSONALTELEPHONE, d2.NAME, d3.NAME, t1.NAME, ec.PERSONALEMAIL, ec.OFFICIALEMAIL, ec.EMERGENCYTELEPHONE, ec.EMERGENCYMOBILE, ec.FAX, t2.NAME, e3.[DESCRIPTION], e2.PASSINGYEAR, e.PhotoPath, e.EMPSIGNATURE, dept1.TIRE, dept1.[DESCRIPTION], dept1.DepartmentID, dept2.TIRE, dept2.[DESCRIPTION], dept2.DepartmentID, dept3.TIRE, dept3.[DESCRIPTION], dept3.DepartmentID, dept4.TIRE, dept4.[DESCRIPTION], dept4.DepartmentID, dept5.TIRE, dept5.[DESCRIPTION], dept5.DepartmentID GO"); sql.AppendFormat("\r\n\r\n"); sql.AppendFormat(@"CREATE VIEW VW_EmployeeSpouseInfo as SELECT e.employeeid, e.employeeNo, e.Name AS 'EmployeeName', s.NAME AS 'SpouseName', ed.description AS 'EducationLevel', oc.DESCRIPTION AS 'Occupation', s.PASSPORTNO AS PassportNo, s.PASSPORTISSUEDATE AS 'PassportIssueDate', s.PASSPORTEXPDATE AS 'PassportExpDate', s.NID, s.InsuranceId, s.InclusionDate FROM EMPSPOUSE s LEFT JOIN EMPLOYEE e ON s.EMPLOYEEID=e.EMPLOYEEID LEFT JOIN EDUCATIONLEVEL ed ON s.EDUCATIONLEVELID=ed.EDUCATIONLEVELID LEFT JOIN OCCUPATION oc ON s.OCCUPATIONID=oc.OCCUPATIONID GO"); sql.AppendFormat("\r\n\r\n"); sql.AppendFormat(@"create view VW_EmployeeSummaryData as select X.*, ( case when X.age >= 20 and X.age <= 30 then '20 - 30' when X.age >= 31 and X.age <= 40 then '31 - 40' when X.age >= 41 and X.age <= 50 then '41 - 50' when X.age >= 51 then '50+' else 'Others' end ) AgeGroup from ( SELECT emp.name Name, dept.DESCRIPTION Department,sc.DESCRIPTION Section, dv.DESCRIPTION division, desg.NAME Designation, g.description Grade, cat.Description Category, region.description Region, zone.description Zone, ( CASE WHEN emp.MARITALSTATUSID = 1 THEN 'Married' WHEN emp.MARITALSTATUSID = 2 THEN 'Unmarried' WHEN emp.MARITALSTATUSID = 3 THEN 'Divorced' WHEN emp.MARITALSTATUSID = 4 THEN 'Widow' ELSE '' END ) 'MaritalStatus', ( CASE WHEN emp.gender = 1 THEN 'Male' WHEN emp.gender = 2 THEN 'Female' WHEN emp.gender = 3 THEN 'Other' ELSE '' END ) 'Gender', ( CASE WHEN emp.BLOODGROUP = 1 THEN 'A+' WHEN emp.BLOODGROUP = 2 THEN 'A-' WHEN emp.BLOODGROUP = 3 THEN 'B+' WHEN emp.BLOODGROUP = 4 THEN 'B-' WHEN emp.BLOODGROUP = 5 THEN 'O+' WHEN emp.BLOODGROUP = 6 THEN 'O-' WHEN emp.BLOODGROUP = 7 THEN 'AB+' WHEN emp.BLOODGROUP = 8 THEN 'AB-' ELSE '' END ) 'BloodGroup', religion.NAME Religion, DATEDIFF(MONTH, emp.birthdate, GETDATE())/12 age FROM EMPLOYEE emp LEFT JOIN DEPARTMENT dept ON emp.DEPARTMENTID = dept.DEPARTMENTID LEFT JOIN DEPARTMENT sc ON sc.DEPARTMENTID = dept.PARENTID LEFT JOIN DEPARTMENT dv ON dv.DEPARTMENTID = sc.PARENTID LEFT JOIN DESIGNATION desg ON emp.DESIGNATIONID = desg.DESIGNATIONID LEFT JOIN RELIGION religion ON emp.RELIGIONID = RELIGION.RELIGIONID LEFT JOIN CATEGORY cat ON emp.CATEGORYID = cat.CATEGORYID LEFT JOIN GRADES g ON emp.GRADEID = g.GRADEID LEFT JOIN LOCATION region on emp.LOCATIONID = region.LOCATIONID LEFT JOIN LOCATION zone on zone.LOCATIONID = region.parentId WHERE emp.STATUS=1 ) X GO"); sql.AppendFormat("\r\n\r\n"); sql.AppendFormat(@"CREATE VIEW VW_EmployeeTrainingInfo as SELECT e.EMPLOYEEID AS EmployeeId, e.employeeNo AS EmployeeNo, e.NAME AS EmployeeName, t.name AS TrainingTitle, t.description AS Description, (SELECT name FROM TRAININGTYPE WHERE TRAININGTYPEID = t.trainingTypeId) AS TrainingType, (SELECT name FROM TRAINING WHERE TRAININGID = t.TRAININGID) AS NatureOfTraining, (SELECT name FROM INSTITUTION WHERE INSTITUTIONID=t.institutionId)AS Institution, t.trainingPlace AS TrainingPlace, t.fromDate AS FromDate, t.toDate AS ToDate FROM EMPTRAINING t LEFT JOIN EMPLOYEE e ON t.EMPLOYEEID = e.EMPLOYEEID GO"); sql.AppendFormat("\r\n\r\n"); sql.AppendFormat(@"create Procedure ProfileComplitionPercentCalcuate @empId INT AS SET NOCOUNT ON; DECLARE @total INT = 0 DECLARE @mobile VARCHAR(200), @NID VARCHAR(200), @Blood INT, @TIN VARCHAR(50) DECLARE @perAd VARCHAR(2000), @perD INT, @perThana INT, @perTel VARCHAR(100), @perMobile VARCHAR(100) DECLARE @pAd VARCHAR(2000), @pD INT, @pThana INT, @pTel VARCHAR(100), @pMobile VARCHAR(100) DECLARE @ePerson VARCHAR(100), @eAd VARCHAR(2000), @eTel VARCHAR(100) begin SELECT @mobile= e.MOBILENO,@NID= e.NATIONALID, @Blood= e.BLOODGROUP, @TIN= e.TINNO FROM EMPLOYEE e WHERE e.EMPLOYEEID=@empId IF isnull(@mobile, '') <> '' BEGIN SET @total = @total + 10 END IF isnull(@NID, '') <> '' BEGIN SET @total = @total + 10 END IF isnull(@Blood, 0) <> 0 BEGIN SET @total = @total + 10 END IF isnull(@TIN, '') <> '' BEGIN SET @total = @total + 10 END IF EXISTS (SELECT a.ACADEMICID FROM EMPACADEMIC a WHERE a.EMPLOYEEID=@empId) BEGIN SET @total = @total + 20 END IF EXISTS (SELECT e.empFileuploadid FROM empFileUpload e WHERE e.empid=@empId AND e.fileType=1) BEGIN SET @total = @total + 10 END SELECT @perAd= c.PARMANENTADDRESS, @perD= c.PARMANENTDISTRICTID, @perThana= c.PARMANENTTHANAID, @perTel= c.PARMANENTTELEPHONE, @perMobile = c.PARMANENTMOBILE FROM EMPCONTACT c WHERE c.EMPLOYEEID=@empId IF isnull(@perAd, '') <> '' AND isnull(@perD, 0) <> 0 AND isnull(@perThana, 0) <> 0 AND isnull(@perTel, '') <> '' AND isnull(@perMobile, '') <> '' BEGIN SET @total = @total + 10 END SELECT @pAd= c.PRESENTADDRESS, @pD= c.PRESENTDISTRICTID, @pThana= c.PRESENTTHANAID, @pTel= c.PRESENTTELEPHONE, @pMobile = c.PRESENTMOBILE FROM EMPCONTACT c WHERE c.EMPLOYEEID=@empId IF isnull(@pAd, '') <> '' AND isnull(@pD, 0) <> 0 AND isnull(@pThana, 0) <> 0 AND isnull(@pTel, '') <> '' AND isnull(@pMobile, '') <> '' BEGIN SET @total = @total + 10 END SELECT @ePerson= c.EMERGENCYCONTACTPERSON, @eAd= c.EMERGENCYCONTACTADDRESS, @eTel= c.EMERGENCYTELEPHONE FROM EMPCONTACT c WHERE c.EMPLOYEEID=@empId IF isnull(@ePerson, '') <> '' AND isnull(@eAd, '') <> '' AND isnull(@eTel, '') <> '' BEGIN SET @total = @total + 10 END UPDATE EMPLOYEE SET ProfileComplitionPercent=@total WHERE EMPLOYEEID=@empId end GO "); sql.AppendFormat("\r\n\r\n"); sql.AppendFormat(@"CREATE PROCEDURE [dbo].[sp_DashboardInformation] @ModEmployee smallint = 1, @ModLeave smallint = 0, @ModAttendance smallint = 0, @PayrollTypeID int = 1 AS begin declare @LiveEmployee int=0, @NewJoiner int=0, @LeftEmployee int=0 , @PostingMissing int=0, @ConfirmationWaiting int=0 , @NextSalaryDate date, @ProfileComplitionPercent int=0, @ProfileRequest int=0, @LeaveinNextweek int=0, @PendingApproval int=0, @LongPending int=0, @RosterMissing int=0, @PresentDays int=0, @AbsentDays int=0, @WeekStart date=(select DATEADD(DAY, DATEDIFF(DAY, -1, GETDATE()) / 7 * 7, 5)), @WeekEnd date=(select DATEADD(DAY, DATEDIFF(DAY, -1, GETDATE()) / 7 * 7, 5))+6, @TableName NVARCHAR(128), @Sql NVARCHAR(max)='', @InsertSql NVARCHAR(max)='' if @ModEmployee=1 begin set @LiveEmployee=(select count(employeeid) from EMPLOYEE where status=1 and PAYROLLTYPEID=@PayrollTypeID) set @NewJoiner=(select count(e.employeeid) from EMPLOYEE e where month(e.joiningdate)=month(getdate()) AND year(e.joiningdate)=year(getdate()) and PAYROLLTYPEID=@PayrollTypeID) set @LeftEmployee=(select count(e.employeeid) from EMPLOYEE e where month(e.ENDOFCONTRACTDATE)=month(getdate()) AND year(e.ENDOFCONTRACTDATE)=year(getdate()) and PAYROLLTYPEID=@PayrollTypeID) set @PostingMissing=(select count(e.employeeid) from EMPLOYEE e where PAYROLLTYPEID=@PayrollTypeID AND (e.GRADEID is null OR e.DEPARTMENTID is null OR e.DESIGNATIONID is null OR e.locationid is null OR e.basicsalary=0 )) set @ConfirmationWaiting=(select count(e.employeeid) from EMPLOYEE e where e.ISCONFIRMED=0 and dbo.fun_datediff_in_months( e.joiningdate, getdate())>=3 and PAYROLLTYPEID=@PayrollTypeID) -- Window period 3 months set @NextSalaryDate=(select NEXTPAYPROCESSDATE from payrolltype where PAYROLLTYPEID=@PayrollTypeID) set @ProfileComplitionPercent=(select (select sum(ProfileComplitionPercent) from employee where status=1 and PAYROLLTYPEID=@PayrollTypeID)/ (select count(employeeid) from employee where status=1 and PAYROLLTYPEID=@PayrollTypeID)) set @ProfileRequest=(select count(purid) from ProfileUpdateRequest pr,employee e where month(pr.Requestdate)=month(getdate()) AND year(pr.Requestdate)=year(getdate()) and e.employeeid=pr.RequestEmpID and e.PAYROLLTYPEID=@PayrollTypeID ) set @Sql=@Sql+'LiveEmployee INT,NewJoiner INT,LeftEmployee INT,PostingMissing INT,ConfirmationWaiting int,NextSalaryDate date,ProfileComplitionPercent int'; set @InsertSql=@InsertSql+cast(@LiveEmployee as varchar) +','+cast(@NewJoiner as varchar) +','+cast(@LeftEmployee as varchar) +','+cast(@PostingMissing as varchar) +','+cast(@ConfirmationWaiting as varchar) +','''+cast(@NextSalaryDate as varchar) +''','+cast(@ProfileComplitionPercent as varchar) ; end if @ModLeave=1 begin set @LeaveinNextweek=(select count(le.tranid) from leaveentry le ,employee e where e.employeeid=le.empid AND le.aprfromdate>=@WeekStart and le.aprtodate<=@WeekEnd AND e.payrolltypeid=@Payrolltypeid ) set @PendingApproval=(select count(wn.employeeid) from WFMovementNext wn,employee e where e.employeeid=wn.employeeid AND month(receivedatetime)=month(getdate()) AND year(receivedatetime)=year(getdate()) AND e.payrolltypeid=@Payrolltypeid) set @LongPending=(select count(wn.employeeid) from WFMovementNext wn,employee e where e.employeeid=wn.employeeid AND dbo.fun_datediff_in_months(receivedatetime, getdate())>=1 --- one month window AND e.payrolltypeid=@Payrolltypeid) if len(@Sql)>0 begin set @Sql=@Sql+','; end if len(@InsertSql)>0 begin set @InsertSql=@InsertSql+','; end set @Sql=@Sql+'LeaveinNextweek int,PendingApproval int,LongPending int'; set @InsertSql=@InsertSql+cast(@LeaveinNextweek as varchar) +','+cast(@PendingApproval as varchar) +','+cast(@LongPending as varchar) end if @ModAttendance=1 begin set @RosterMissing=(SELECT count(EMPLOYEEID ) FROM employee e WHERE NOT EXISTS (select ws.EMPLOYEEID from employeeworkplansetup ws,monthlyworkplan wp where ws.WORKPLANGROUPID=wp.WorkPlanGroupID and CONVERT(VARCHAR,wp.WorkDate,106)=CONVERT(VARCHAR,GETDATE(),106) AND ws.EMPLOYEEID = e.EMPLOYEEID) and status=1 and PAYROLLTYPEID=@Payrolltypeid) set @PresentDays=(select count(e.employeeid) from DAILYATTNPROCESS dp,EMPLOYEE e where CONVERT(VARCHAR,attndate,106)=CONVERT(VARCHAR,GETDATE(),106) --and AttenType=1 // AttenType not found and e.EMPLOYEEID=dp.EMPLOYEEID and e.PAYROLLTYPEID=@Payrolltypeid) set @AbsentDays=(select count(e.employeeid) from DAILYATTNPROCESS dp,EMPLOYEE e where CONVERT(VARCHAR,attndate,106)=CONVERT(VARCHAR,GETDATE(),106) --and AttenType=2 // AttenType not found and e.EMPLOYEEID=dp.EMPLOYEEID and e.PAYROLLTYPEID=@Payrolltypeid) if len(@Sql)>0 begin set @Sql=@Sql+','; end if len(@InsertSql)>0 begin set @InsertSql=@InsertSql+','; end set @Sql=@Sql+'RosterMissing int,PresentDays int,AbsentDays int'; set @InsertSql=@InsertSql+cast(@RosterMissing as varchar) +','+cast(@PresentDays as varchar) +','+cast(@AbsentDays as varchar) end set @TableName='DashboardInformation'; exec('drop table '+ @TableName) --WAITFOR DELAY '00:00:02' set @Sql='CREATE TABLE '+ @TableName+'('+@Sql+')'; exec sp_executeSQL @Sql --WAITFOR DELAY '00:00:02' set @InsertSql='Insert into '+@TableName+' values('+@InsertSql+')'; exec sp_executeSQL @InsertSql select * from DashboardInformation end -- exec sp_DashboardInformation 1,1,1,1 -- select joiningdate from EMPLOYEE -- select * from ProfileUpdateRequest --- drop table DashboardInformation ------- select * from DashboardInformation -- select * from WFMovementNext GO"); sql.AppendFormat("\r\n\r\n"); sql.AppendFormat(@"CREATE PROCEDURE sp_delete_LeaveEntry_with_Workflow @TranID INT AS --BEGIN -- Column name or number of supplied values does not match table definition. -- delete process of WFMOVEMENTTASK --IF OBJECT_ID ('dbo.DELETED_WFMOVEMENTTASK') IS NULL -- BEGIN -- SELECT * INTO DELETED_WFMOVEMENTTASK FROM WFMOVEMENTTASK -- WHERE WFMOVEMENTTRANID IN (SELECT WFMOVEMENTTRANID FROM WFMOVEMENTTRAN WHERE OBJECTID = @TranID) -- END --ELSE -- BEGIN -- INSERT INTO DELETED_WFMOVEMENTTASK -- SELECT * FROM WFMOVEMENTTASK -- WHERE WFMOVEMENTTRANID IN (SELECT WFMOVEMENTTRANID FROM WFMOVEMENTTRAN WHERE OBJECTID = @TranID) -- END --DELETE FROM WFMOVEMENTTASK --WHERE WFMOVEMENTTRANID IN (SELECT WFMOVEMENTTRANID FROM WFMOVEMENTTRAN WHERE OBJECTID = @TranID) ---- delete process of WFMOVEMENTNEXT --IF OBJECT_ID ('dbo.DELETED_WFMOVEMENTNEXT') IS NULL -- BEGIN -- SELECT * INTO DELETED_WFMOVEMENTNEXT FROM WFMOVEMENTNEXT -- WHERE WFMOVEMENTTRANID IN (SELECT WFMOVEMENTTRANID FROM WFMOVEMENTTRAN WHERE OBJECTID = @TranID) -- END --ELSE -- BEGIN -- INSERT INTO DELETED_WFMOVEMENTNEXT -- SELECT * FROM WFMOVEMENTNEXT -- WHERE WFMOVEMENTTRANID IN (SELECT WFMOVEMENTTRANID FROM WFMOVEMENTTRAN WHERE OBJECTID = @TranID) -- END -- DELETE FROM WFMOVEMENTNEXT --WHERE WFMOVEMENTTRANID IN (SELECT WFMOVEMENTTRANID FROM WFMOVEMENTTRAN WHERE OBJECTID = @TranID) ---- delete process of WFMOVEMENTTRAN --IF OBJECT_ID ('dbo.DELETED_WFMOVEMENTTRAN') IS NULL -- BEGIN -- SELECT * INTO DELETED_WFMOVEMENTTRAN FROM WFMOVEMENTTRAN WHERE OBJECTID = @TranID -- END --ELSE -- BEGIN -- INSERT INTO DELETED_WFMOVEMENTTRAN -- SELECT * FROM WFMOVEMENTTRAN WHERE OBJECTID = @TranID -- END --DELETE FROM WFMOVEMENTTRAN WHERE OBJECTID = @TranID ---- delete process of LEAVEENTRY -- IF OBJECT_ID ('dbo.DELETED_LEAVEENTRY') IS NULL -- BEGIN -- SELECT * INTO DELETED_LEAVEENTRY FROM LEAVEENTRY WHERE TRANID = @TranID -- END --ELSE -- BEGIN -- INSERT INTO DELETED_LEAVEENTRY -- SELECT * FROM LEAVEENTRY WHERE TRANID = @TranID -- END --DELETE FROM LEAVEENTRY WHERE TRANID = @TranID --END GO"); sql.AppendFormat("\r\n\r\n"); sql.AppendFormat(@"CREATE PROCEDURE [dbo].[sp_Insert_DailyAttendanceAllowance] @DailyAttendanceProcessID INT, @AttnDate DATETIME, @EmployeeID INT, @ShiftID INT, @PayrollTypeID INT, @OtherBenifitItemID INT, @OtherBenifitValue money, @SalaryMonth INT, @IsArrear INT, @AutoCreated INT, @ManualEdited INT, @CreatedBy INT, @CreatedDate DATETIME, @ModifiedBy INT, @ModifiedDate DATETIME AS BEGIN SET NOCOUNT ON; DECLARE @DailyAttendanceAllowanceCount INT=0; SET @DailyAttendanceAllowanceCount = (Select COUNT(*) FROM DailyAttendanceAllowance WHERE EmployeeID=@EmployeeID AND AttnDate=@AttnDate); IF @DailyAttendanceAllowanceCount > 0 BEGIN -- Update Script UPDATE DailyAttendanceAllowance SET ShiftID = @ShiftID, ModifiedBy = @ModifiedBy, ModifiedDate = @ModifiedDate, PayrollTypeID = @PayrollTypeID , OtherBenifitItemID =@OtherBenifitItemID, OtherBenifitValue = @OtherBenifitValue, SalaryMonth = @SalaryMonth, IsArrear = @IsArrear , AutoCreated = @AutoCreated , ManualEdited = @ManualEdited WHERE EmployeeID=@EmployeeID AND AttnDate=@AttnDate END ELSE BEGIN -- Insert Script INSERT INTO DailyAttendanceAllowance( DailyAttendanceProcessID, AttnDate, EmployeeID, ShiftID, PayrollTypeID, CreatedBy, CreatedDate, OtherBenifitItemID, OtherBenifitValue, SalaryMonth, IsArrear,AutoCreated,ManualEdited ) VALUES( null, @AttnDate, @EmployeeID, @ShiftID, @PayrollTypeID, @CreatedBy, @CreatedDate, @OtherBenifitItemID, @OtherBenifitValue, @SalaryMonth, @IsArrear, @AutoCreated,@ManualEdited ) END END GO"); sql.AppendFormat("\r\n\r\n"); sql.AppendFormat(@"CREATE PROCEDURE [dbo].[sp_Insert_DailyAttnProcess] @EMPLOYEEID INT, @AttnDate DATETIME, @ShiftID INT , @WorkDayType SMALLINT , @AttenType SMALLINT , @Comments VARCHAR (250) , @Reason VARCHAR (250) , @IsManualEntry BIT , @IsLate BIT , @LateHour DECIMAL (28,16) , @EarlyHour DECIMAL (28,16) , @OTHour DECIMAL (28,16) , @CREATEDBY INT , @CREATEDDATE DATETIME , @OtRemarks VARCHAR (150) , @WFStatus INT , @ApprovedOTHOUR DECIMAL (6,2) , @LMRemarks VARCHAR (400) , @IsFromMobile BIT , @ReferenceID INT , @actualShiftID INT , @Empremarks VARCHAR (200) , @LineManagerID INT , @OnbehalfEmpID INT , @WorkHour MONEY , @InTimeNearestAddress VARCHAR (500) , @OutTimeNearestAddress VARCHAR (500) , @InTimeLatitude VARCHAR (200) , @OutTimeLatitude VARCHAR (200) , @InTimeLongitude VARCHAR (200) , @outTimeLongitude VARCHAR (200) , @LMApproveDate DATETIME , @EmpApplyDate DATETIME , @InTime DATETIME , @OutTime DATETIME , @ActualInTime DATETIME , @ActualOutTime DATETIME , @MODIFIEDBY INT , @MODIFIEDDATE DATETIME AS BEGIN SET NOCOUNT ON; DECLARE @DailyAttnProcessCount INT=0; SET @DailyAttnProcessCount=(Select COUNT(*) from DailyAttnProcess WHERE EmployeeID=@EmployeeID AND AttnDate=@AttnDate); IF @DailyAttnProcessCount>0 BEGIN -- Update Script (no attentype found on employee table) UPDATE DailyAttnProcess SET ShiftID=@ShiftID, InTime=@InTime, OutTime=@OutTime --,AttenType=@AttenType ,Comments=@Comments, IsManualEntry=@IsManualEntry,IsFromMobile=@IsFromMobile,LateHour=@LateHour, EarlyHour=@EarlyHour, OTHour=@OTHour, ReferenceID=@ReferenceID, WorkDayType=@WorkDayType, Reason=@Reason, IsLate=@IsLate, OtRemarks=@OtRemarks, WFStatus=@WFStatus,ApprovedOTHOUR=@ApprovedOTHOUR, LMRemarks=@LMRemarks,ActualInTime=@ActualInTime, ActualOutTime=@ActualOutTime, actualShiftID=@ActualShiftID, Empremarks=@Empremarks, EmpApplyDate=@EmpApplyDate, LMApproveDate=@LMApproveDate, LineManagerID=@LineManagerID, OnbehalfEmpID=@OnbehalfEmpID,WorkHour=@WorkHour,InTimeNearestAddress=@InTimeNearestAddress,OutTimeNearestAddress=@OutTimeNearestAddress, InTimeLatitude=@InTimeLatitude,OutTimeLatitude=@OutTimeLatitude,InTimeLongitude =@InTimeLongitude ,outTimeLongitude=@outTimeLongitude, ModifiedBy=@ModifiedBy, ModifiedDate=@ModifiedDate WHERE EmployeeID=@EmployeeID AND AttnDate=@AttnDate END ELSE BEGIN -- Insert Script INSERT INTO DailyAttnProcess(EmployeeID, AttnDate,ShiftID, InTime, OutTime --,AttenType ,Comments, IsManualEntry,IsFromMobile,LateHour, EarlyHour, OTHour, ReferenceID, WorkDayType, Reason, IsLate, OtRemarks, WFStatus,ApprovedOTHOUR, LMRemarks,ActualInTime, ActualOutTime, actualShiftID, Empremarks, EmpApplyDate, LMApproveDate, LineManagerID, OnbehalfEmpID,WorkHour,InTimeNearestAddress,OutTimeNearestAddress, InTimeLatitude,OutTimeLatitude,InTimeLongitude,outTimeLongitude, CREATEDBY, CREATEDDATE) VALUES(@EmployeeID, @AttnDate,@ShiftID, @InTime, @OutTime --,@AttenType ,@Comments, @IsManualEntry,@IsFromMobile,@LateHour, @EarlyHour, @OTHour, @ReferenceID, @WorkDayType, @Reason, @IsLate, @OtRemarks, @WFStatus,@ApprovedOTHOUR, @LMRemarks,@ActualInTime, @ActualOutTime, @ActualShiftID, @Empremarks, @EmpApplyDate, @LMApproveDate, @LineManagerID, @OnbehalfEmpID,@WorkHour,@InTimeNearestAddress,@OutTimeNearestAddress, @InTimeLatitude,@OutTimeLatitude,@InTimeLongitude ,@outTimeLongitude, @CREATEDBY, @CREATEDDATE) END END GO"); sql.AppendFormat("\r\n\r\n"); sql.AppendFormat(@"create Procedure spShowRelationShips ( @Table varchar(250) = null, @RelatedTable varchar(250) = null ) as begin if @Table is null and @RelatedTable is null select object_name(k.constraint_object_id) ForeginKeyName, object_name(k.Parent_Object_id) TableName, object_name(k.referenced_object_id) RelatedTable, c.Name RelatedColumnName, object_name(rc.object_id) + '.' + rc.name RelatedKeyField from sys.foreign_key_columns k left join sys.columns c on object_name(c.object_id) = object_name(k.Parent_Object_id) and c.column_id = k.parent_column_id left join sys.columns rc on object_name(rc.object_id) = object_name(k.referenced_object_id) and rc.column_id = k.referenced_column_id order by 2,3 if @Table is not null and @RelatedTable is null select object_name(k.constraint_object_id) ForeginKeyName, object_name(k.Parent_Object_id) TableName, object_name(k.referenced_object_id) RelatedTable, c.Name RelatedColumnName, object_name(rc.object_id) + '.' + rc.name RelatedKeyField from sys.foreign_key_columns k left join sys.columns c on object_name(c.object_id) = object_name(k.Parent_Object_id) and c.column_id = k.parent_column_id left join sys.columns rc on object_name(rc.object_id) = object_name(k.referenced_object_id) and rc.column_id = k.referenced_column_id where object_name(k.Parent_Object_id) =@Table order by 2,3 if @Table is null and @RelatedTable is not null select object_name(k.constraint_object_id) ForeginKeyName, object_name(k.Parent_Object_id) TableName, object_name(k.referenced_object_id) RelatedTable, c.Name RelatedColumnName, object_name(rc.object_id) + '.' + rc.name RelatedKeyField from sys.foreign_key_columns k left join sys.columns c on object_name(c.object_id) = object_name(k.Parent_Object_id) and c.column_id = k.parent_column_id left join sys.columns rc on object_name(rc.object_id) = object_name(k.referenced_object_id) and rc.column_id = k.referenced_column_id where object_name(k.referenced_object_id) =@RelatedTable order by 2,3 end GO"); sql.AppendFormat("\r\n\r\n"); sql.AppendFormat(@"create function fun_datediff_in_months ( @StartDate date, @EndDate date ) returns int as begin declare @months int=0; set @months=( select CAST(DATEDIFF(MONTH, @StartDate, @EndDate) AS int) - (DATEPART(dd,@StartDate) - 1) / DATEDIFF(DAY, @StartDate, DATEADD(MONTH, 1, @StartDate)) + (DATEPART(dd,@EndDate)*1 ) / DATEDIFF(DAY, @EndDate, DATEADD(MONTH, 1, @EndDate))) return @months end GO"); sql.AppendFormat("\r\n\r\n"); sql.AppendFormat(@"CREATE FUNCTION GetDeptHeadID(@employeeId as INT) RETURNS varchar(15) AS BEGIN DECLARE @EmployeeNo VARCHAR(15); BEGIN WITH cteReports (Organogramid, PositionName ,PARENTID, TIER ) AS ( SELECT Organogramid, PositionName,PARENTID, organogram.TIER FROM organogram ,organEmployee WHERE organogram.ORGANOGRAMID =organEmployee.NODEID and organEmployee.EMPLOYEEID =@employeeId UNION ALL SELECT e.Organogramid, e.PositionName, e.PARENTID, e.TIER FROM organogram e INNER JOIN cteReports r ON e.Organogramid = r.PARENTID ) SELECT @EmployeeNo= em.EMPLOYEENO FROM cteReports left join ORGANPOSITION on cteReports.Organogramid =ORGANPOSITION.nodeid left join OGPositionType on OGPositionType.OGPOSITIONTYPEID =ORGANPOSITION.POSITIONTYPEID left JOIN organEmployee oe on oe.NODEID = cteReports.Organogramid left JOIN employee em on em.EMPLOYEEID = oe.EMPLOYEEID WHERE OGPOSITIONTYPE=3 AND tier=2 order by cteReports.tier DESC END RETURN @EmployeeNo END GO"); sql.AppendFormat("\r\n\r\n"); sql.AppendFormat(@"CREATE FUNCTION [dbo].[GetFormattedDate](@SelectedDate DATETIME, @IsTimeNeeded BIT) RETURNS VARCHAR(20) AS BEGIN DECLARE @formattedDateTime VARCHAR(20); IF @IsTimeNeeded = 1 Begin SET @formattedDateTime = CONVERT(VARCHAR, @SelectedDate, 106) + ' ' +STUFF(RIGHT(CONVERT(VARCHAR,@SelectedDate,100),7),6,0,' ') END ELSE BEGIN SET @formattedDateTime = CONVERT(VARCHAR, @SelectedDate, 106) END RETURN @formattedDateTime END GO"); sql.AppendFormat("\r\n\r\n"); sql.AppendFormat(@"DROP VIEW Salary CREATE VIEW SALARY AS SELECT EMPLOYEEID, SALARYMONTH, ITEMGROUP, ITEMCODE, ITEMID, DESCRIPTION, CHANGEDAMOUNT, CCID, PAYROLLTYPEID FROM(SELECT emp.EMPLOYEEID, FORMAT(b.SalaryMonth, 'DD Mon YYYY') SalaryMonth, b.ITEMGROUP, b.ITEMCODE, b.ITEMID, b.DESCRIPTION, b.CHANGEDAMOUNT, (SELECT c.COSTCENTERID FROM SALARYEMPCOSTCENTER c WHERE c.EMPLOYEEID = emp.EMPLOYEEID AND c.SALARYMONTHLYID = b.SALARYMONTHLYID) ccid, b.PAYROLLTYPEID FROM EMPLOYEE emp LEFT OUTER JOIN (SELECT sm.EMPLOYEEID, sm.SALARYMONTH, sm.PAYROLLTYPEID, smd.* FROM SALARYMONTHLYDETAIL smd, SALARYMONTHLY sm WHERE smd.SALARYMONTHLYID = sm.SALARYMONTHLYID) b ON(b.EMPLOYEEID = emp.EMPLOYEEID)) tab1 WHERE salarymonth IS NOT NULL; GO"); sql.AppendFormat("\r\n\r\n"); sql.AppendFormat(@"IF COL_LENGTH('dbo.userrole', 'eventdate') IS NOT NULL BEGIN update userrole set EVENTDATE ='1 Jan 2023' END"); sql.AppendFormat("\r\n\r\n"); sql.AppendFormat(@"IF COL_LENGTH('dbo.users', 'usertype') IS NOT NULL BEGIN update users set usertype =0 WHERE userid in ( -9,-8) END"); sql.AppendFormat("\r\n\r\n"); sql.AppendFormat(@"IF COL_LENGTH('dbo.PasswordHistory', 'passwordhistoryid') IS NOT NULL BEGIN IF OBJECT_ID('dbo.[PK_PasswordHistory]') IS NOT NULL begin ALTER TABLE dbo.PasswordHistory DROP CONSTRAINT PK_PasswordHistory; end ALTER TABLE PasswordHistory ALTER COLUMN PassHisID int NULL; --update PasswordHistory set passwordhistoryid = PassHisID; END"); sql.AppendFormat("\r\n\r\n"); sql.AppendFormat(@"IF COL_LENGTH('dbo.HOLIDAYCALENDAR', 'EntryDate') IS NOT NULL BEGIN ALTER TABLE HOLIDAYCALENDAR ALTER COLUMN EntryDate DateTime NULL END"); sql.AppendFormat("\r\n\r\n"); sql.AppendFormat(@"IF COL_LENGTH('dbo.HOLIDAYCALENDAR', 'userid') IS NOT NULL BEGIN ALTER TABLE HOLIDAYCALENDAR ALTER COLUMN userid DateTime NULL END"); #endregion //foreign key sql.AppendFormat("\r\n\r\n"); sql.AppendFormat("-------------- Make columns name upper case ------------------------------------\r\n\r\n"); DataTable dtCols = GetColumnList(EnumTargetType.Destination); if(dtCols!= null) { foreach(DataRow dr in dtCols.Rows) { sql.AppendFormat("\r\n"); sql.AppendFormat(dr[0].ToString()); sql.AppendFormat("\r\n"); sql.AppendFormat("GO"); } } WriteScript(sql.ToString()); } catch (Exception ex) { MessageBox.Show("exception occured while creating table:" + ex.Message + "\t" + ex.GetType(),"Error",MessageBoxButtons.OK,MessageBoxIcon.Error); } } private string GetColumnSqlCREATE(TableList row) { StringBuilder sql = new StringBuilder(); var identityColumnExist = _dtIdentityColumns.AsEnumerable().Where(x => x[0].ToString().ToLower() == row.TableName.ToLower().ToLower() && x[1].ToString().ToLower() == row.ColumnName.ToLower().ToLower()).Any(); if (identityColumnExist) { sql.AppendFormat("\t[{0}] [{1}] {2} IDENTITY(1,1) ", row.ColumnName, row.DataType, (HasLength(row.DataType.ToString())) ? "(" + row.Length.ToString() + ")" : (HasPrecisionAndScale(row.DataType)) ? "(" + row.Precision.ToString() + "," + row.Scale.ToString() + ")" : "" ); } else { sql.AppendFormat("\t[{0}] [{1}] {2} ", row.ColumnName, row.DataType, (HasLength(row.DataType.ToString())) ? "(" + row.Length.ToString() + ")" : (HasPrecisionAndScale(row.DataType)) ? "(" + row.Precision.ToString() + "," + row.Scale.ToString() + ")" : "" ); } if (row.IsDefaultValueRequired || !String.IsNullOrEmpty(row.DefaultValue)) { row.DefaultValue = DefaultValueSet(row.DefaultValue, row.ColumnName); if (row.DataType.ToLower() == "int" || row.DataType.ToLower() == "smallint" || row.DataType.ToLower() == "bit" || row.DataType.ToLower() == "money" || row.DataType.ToLower() == "numeric" || row.DataType.ToLower() == "decimal" || row.DataType.ToLower() == "float" || row.DataType.ToLower() == "tinyint" || ((row.DataType.ToLower() == "date" || row.DataType.ToLower() == "datetime" || row.DataType.ToLower() == "datetime2") && row.DefaultValue == "GETDATE()")) { sql.AppendFormat("{0}", "DEFAULT (" + row.DefaultValue + ")"); } else { if (row.DefaultValue.Contains("'")) { sql.AppendFormat("{0}", "DEFAULT (" + row.DefaultValue + ")"); } else { sql.AppendFormat("{0}", "DEFAULT ('" + row.DefaultValue + "')"); } } } if (row.AllowNull.ToLower() == "yes") { sql.AppendFormat("{0}", "NULL"); } else { sql.AppendFormat("{0}", "NOT NULL"); } sql.AppendFormat(","); sql.AppendFormat("\r\n"); return sql.ToString(); } private string GetColumnSqlALTER(TableList row) { StringBuilder sql = new StringBuilder(); sql.AppendFormat("\t[{0}] [{1}] {2} {3} ", row.ColumnName, row.DataType, (HasLength(row.DataType.ToString())) ? "(" + row.Length.ToString() + ")" : (HasPrecisionAndScale(row.DataType)) ? "(" + row.Precision.ToString() + "," + row.Scale.ToString() + ")" : "", (row.AllowNull.ToLower() == "yes") ? "NULL" : "NOT NULL" //, // row.IsDefaultValueRequired ? ((row.DataType.ToLower() == "int" || row.DataType.ToLower() == "smallint" || ((row.DataType.ToLower() == "date" || row.DataType.ToLower() == "datetime" || row.DataType.ToLower() == "datetime2") && row.DefaultValue == "GETDATE()")) ? "DEFAULT (" + row.DefaultValue + ")" : "DEFAULT ('" + row.DefaultValue + "')") : string.Empty // row.IsDefaultValueRequired ? ((row.DataType.ToLower() == "int" || row.DataType.ToLower() == "smallint") ? "DEFAULT (" + row.DefaultValue + ")" : "DEFAULT ('" + row.DefaultValue + "')") : string.Empty ); if (row.IsDefaultValueRequired || !String.IsNullOrEmpty(row.DefaultValue)) { row.DefaultValue = DefaultValueSet(row.DefaultValue, row.ColumnName); if (row.DataType.ToLower() == "int" || row.DataType.ToLower() == "smallint" || row.DataType.ToLower() == "bit" || row.DataType.ToLower() == "money" || row.DataType.ToLower() == "numeric" || row.DataType.ToLower() == "decimal" || row.DataType.ToLower() == "float" || row.DataType.ToLower() == "tinyint" || ((row.DataType.ToLower() == "date" || row.DataType.ToLower() == "datetime" || row.DataType.ToLower() == "datetime2") && row.DefaultValue == "GETDATE()")) { sql.AppendFormat("{0}", "DEFAULT (" + row.DefaultValue + ")"); } else { if (row.DefaultValue.Contains("'")) { sql.AppendFormat("{0}", "DEFAULT (" + row.DefaultValue + ")"); } else { sql.AppendFormat("{0}", "DEFAULT ('" + row.DefaultValue + "')"); } } } sql.AppendFormat(","); sql.AppendFormat("\r\n"); return sql.ToString(); } private string DefaultValueSet(string value, string colName) { value = DefValueBracesCheck(value); if (colName.ToLower() == "userid" || colName.ToLower() == "createdby") { value = !string.IsNullOrEmpty(textBox1.Text) ? textBox1.Text : value; } else if (colName.ToLower() == "payrolltypeid") { value = !string.IsNullOrEmpty(textBox2.Text) ? textBox2.Text : value; } else if (colName.ToLower() == "createddate") { value = !string.IsNullOrEmpty(textBox3.Text) ? textBox3.Text : value; } return value; } private string DefValueBracesCheck(string value) { string first = "("; string last = ")"; char[] bracketChars = { '(', ')' }; foreach (char bracket in bracketChars) { value = value.Replace(bracket.ToString(), string.Empty); if (value.ToLower() == "getdate") { value = value + first + last; } } return value; } private StringBuilder DefaultValueAppendAlterColumn(TableList row, StringBuilder sql) { if (row.IsDefaultValueRequired || !String.IsNullOrEmpty(row.DefaultValue)) { row.DefaultValue = DefaultValueSet(row.DefaultValue, row.ColumnName); sql.AppendFormat("ALTER TABLE [{0}] ADD CONSTRAINT [{1}] ", row.TableName, "DF_" + row.TableName + "_" + row.ColumnName); if (row.DataType.ToLower() == "int" || row.DataType.ToLower() == "smallint" || row.DataType.ToLower() == "bit" || row.DataType.ToLower() == "money" || row.DataType.ToLower() == "numeric" || row.DataType.ToLower() == "decimal" || row.DataType.ToLower() == "float" || row.DataType.ToLower() == "tinyint" || ((row.DataType.ToLower() == "date" || row.DataType.ToLower() == "datetime" || row.DataType.ToLower() == "datetime2") && row.DefaultValue.ToLower() == "getdate()")) { sql.AppendFormat("{0}", "DEFAULT (" + row.DefaultValue + ")"); } else { if (row.DefaultValue.Contains("'")) { sql.AppendFormat("{0}", "DEFAULT (" + row.DefaultValue + ")"); } else { sql.AppendFormat("{0}", "DEFAULT ('" + row.DefaultValue + "')"); } } sql.AppendFormat(" FOR {0}", row.ColumnName); sql.AppendFormat(";\r\n"); } return sql; } private StringBuilder ForeignKeyCreate(DataTable dtFKSource, StringBuilder sql, DataTable dtFKDestination) { List _oTableNames = _oTableLists.Select(y => y.TableName).Distinct().ToList(); foreach (var item in _oTableNames) { string fkCol = null; string fkRefCol = null; string fkRefTable = null; string fkConstraint = null; foreach (DataRow dr in dtFKSource.Rows) { if (item == dr[1].ToString()) { fkConstraint = dr[0].ToString(); fkCol = dr[2].ToString(); fkRefTable = dr[3].ToString(); fkRefCol = dr[4].ToString(); } } if (fkCol != null) { var fkRefTablePKExist = dtFKDestination.AsEnumerable().Where(x => x[3].ToString().ToLower() == fkRefTable.ToLower() && x[4].ToString().ToLower() == fkRefCol.ToLower() && x[1].ToString().ToLower() == item.ToLower() && x[2].ToString().ToLower() == fkCol.ToLower()).Any(); if (fkRefTablePKExist == false) { sql.AppendFormat("\r\n"); sql.AppendFormat("ALTER TABLE [{0}] ADD CONSTRAINT [{1}] FOREIGN KEY ({2}) REFERENCES {3} ({4});", item, fkConstraint, fkCol, fkRefTable, fkRefCol); } } } return sql; } private StringBuilder ExistingDefaultConstraintCheck(DataTable dtDefaultKeyDestination, StringBuilder sql, TableList row) { //if (row.IsDefaultValueRequired || !String.IsNullOrEmpty(row.DefaultValue)) //{ var PrevDFConExist = dtDefaultKeyDestination.AsEnumerable().Where(x => x[0].ToString().ToLower() == row.TableName.ToLower() && x[1].ToString().ToLower() == row.ColumnName.ToLower()).Any(); if (PrevDFConExist) { var defRow = dtDefaultKeyDestination.AsEnumerable().Where(x => x[0].ToString().ToLower() == row.TableName.ToLower() && x[1].ToString().ToLower() == row.ColumnName.ToLower()).FirstOrDefault(); sql.AppendFormat("ALTER TABLE [{0}] DROP CONSTRAINT {1}", row.TableName, defRow[2].ToString() ); sql.AppendFormat(";\r\n"); } //} return sql; } private static bool HasLength(string dataType) { Dictionary dataTypes = new Dictionary(); dataTypes.Add("bigint", false); dataTypes.Add("binary", true); dataTypes.Add("bit", false); dataTypes.Add("char", true); dataTypes.Add("date", false); dataTypes.Add("datetime", false); dataTypes.Add("datetime2", false); dataTypes.Add("datetimeoffset", false); dataTypes.Add("decimal", false); dataTypes.Add("float", true); dataTypes.Add("geography", false); dataTypes.Add("geometry", false); dataTypes.Add("hierarchyid", false); dataTypes.Add("image", false); dataTypes.Add("int", false); dataTypes.Add("money", false); dataTypes.Add("nchar", true); dataTypes.Add("ntext", false); dataTypes.Add("numeric", false); dataTypes.Add("nvarchar", true); dataTypes.Add("real", false); dataTypes.Add("smalldatetime", false); dataTypes.Add("smallint", false); dataTypes.Add("smallmoney", false); dataTypes.Add("sql_variant", false); dataTypes.Add("sysname", false); dataTypes.Add("text", false); dataTypes.Add("time", false); dataTypes.Add("timestamp", false); dataTypes.Add("tinyint", false); dataTypes.Add("uniqueidentifier", false); dataTypes.Add("varbinary", true); dataTypes.Add("varchar", true); dataTypes.Add("xml", false); if (dataTypes.ContainsKey(dataType.ToLower())) return dataTypes[dataType.ToLower()]; return false; } private static bool HasPrecisionAndScale(string dataType) { if (_dataTypes.ContainsKey(dataType.ToLower())) return _dataTypes[dataType.ToLower()]; return false; } private void WriteScript(string script) { try { SaveFileDialog sDialog = new SaveFileDialog(); sDialog.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*"; sDialog.FileName = "Comparison Script For " + cmbDestinationDatabase.Text; if (sDialog.ShowDialog() == DialogResult.OK) { File.WriteAllText(sDialog.FileName, script); MessageBox.Show("File created at " + sDialog.FileName, "Saved", MessageBoxButtons.OK, MessageBoxIcon.Information); } //var finalPath = string.Empty; //var basePath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop); ////var path = $@"{basePath}Documents\"; //var path = basePath; //Directory.CreateDirectory(path); //finalPath = Path.Combine(path, "Script.txt"); //if (File.Exists(finalPath)) //{ // File.Delete(finalPath); //} //using (var w = new StreamWriter(finalPath)) //{ // w.WriteLine("---------------Script File Created-----------------"); //} //using (var w = File.AppendText(finalPath)) //{ // if (!string.IsNullOrEmpty(script)) // w.WriteLine("\n" + script); //} //MessageBox.Show("Scriot has created for selected tables"); } catch (Exception) { //ignored } } public class TableList { public string TableName { get; set; } public string ColumnName { get; set; } public string DataType { get; set; } public string Length { get; set; } public string AllowNull { get; set; } public string DefaultValue { get; set; } public EnumScriptType ScriptType { get; set; } public bool IsDefaultValueRequired { get; set; } public string Precision { get; set; } public string Scale { get; set; } } private void grdList_CellValueChanged(object sender, DataGridViewCellEventArgs e) { //_oTableLists = new List(); //foreach (DataGridViewRow grd in grdList.Rows) //{ // TableList item = (TableList)grd.Tag; // item.DefaultValue = grd.Cells[e.RowIndex].Value.ToString(); // _oTableLists.Add(item); //} } private void label13_Click(object sender, EventArgs e) { } private void Form1_Load(object sender, EventArgs e) { CreateDataTypePrecision(); this.Text= "Compare Database --> Version : "+ Assembly.LoadFile(Application.StartupPath + "\\DatabaseComparison.exe").GetName().Version.ToString(); } private void CreateDataTypePrecision() { _dataTypes.Add("bigint", false); _dataTypes.Add("binary", false); _dataTypes.Add("bit", false); _dataTypes.Add("char", false); _dataTypes.Add("date", false); _dataTypes.Add("datetime", false); _dataTypes.Add("datetime2", false); _dataTypes.Add("datetimeoffset", false); _dataTypes.Add("decimal", true); _dataTypes.Add("float", false); _dataTypes.Add("geography", false); _dataTypes.Add("geometry", false); _dataTypes.Add("hierarchyid", false); _dataTypes.Add("image", false); _dataTypes.Add("int", false); _dataTypes.Add("money", false); _dataTypes.Add("nchar", false); _dataTypes.Add("ntext", false); _dataTypes.Add("numeric", true); _dataTypes.Add("nvarchar", false); _dataTypes.Add("real", true); _dataTypes.Add("smalldatetime", false); _dataTypes.Add("smallint", false); _dataTypes.Add("smallmoney", false); _dataTypes.Add("sql_variant", false); _dataTypes.Add("sysname", false); _dataTypes.Add("text", false); _dataTypes.Add("time", false); _dataTypes.Add("timestamp", false); _dataTypes.Add("tinyint", false); _dataTypes.Add("uniqueidentifier", false); _dataTypes.Add("varbinary", false); _dataTypes.Add("varchar", false); _dataTypes.Add("xml", false); } } }