這篇文章主要為大家展示了“SQL Server數(shù)據(jù)庫中表名稱、字段比較的示例分析”,內(nèi)容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“SQL Server數(shù)據(jù)庫中表名稱、字段比較的示例分析”這篇文章吧。
成都創(chuàng)新互聯(lián)長期為1000多家客戶提供的網(wǎng)站建設服務,團隊從業(yè)經(jīng)驗10年,關注不同地域、不同群體,并針對不同對象提供差異化的產(chǎn)品和服務;打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為太和企業(yè)提供專業(yè)的成都網(wǎng)站建設、網(wǎng)站建設,太和網(wǎng)站改版等技術服務。擁有十余年豐富建站經(jīng)驗和眾多成功案例,為您定制開發(fā)。前言
項目中一般分測試環(huán)境(QAS),生產(chǎn)環(huán)境(PRD),當我們的項目經(jīng)歷了一次周期跨度較長的更新后,當我們發(fā)布到生產(chǎn)環(huán)境時,首要的任務是將新增的表,字段更新到生產(chǎn)數(shù)據(jù)庫。很多時候,當我們發(fā)布更新的時候,已經(jīng)很難記得做了哪些變更。
當然有的人會說,1.EF Code First 有history記錄,這是一種辦法,可靠么?不可靠。相信即便是用Code First,直接改數(shù)據(jù)庫的肯定不止我一個。
2.查看實體類變更記錄,這也是一個辦法。那如果用的DB First的呢?當然也可以看,就是很麻煩。
3.開發(fā)過程中,對數(shù)據(jù)庫的變更記下來。這么做過的肯定也不止我一個。手動狗頭
。。。。。
中午的時候,就想著另外一個項目下個月要更新,改了N多的東西,到時候數(shù)據(jù)庫咋更新呢。就想著寫個工具比較兩個版本數(shù)據(jù)庫,表名稱,字段,字段類型的區(qū)別。
說干就干(本來想著用EF,DBContext應該可以實現(xiàn),無奈學藝不精,最終還是回到了ADO.Net)。
控制臺應用程序,目前只能對比新增,修改(SQl Server)。
using System; using System.Collections.Generic; using System.Data.SqlClient; using System.Linq; using System.Text; using Microsoft.EntityFrameworkCore; namespace EFGetTable { class Program { static void Main(string[] args) { string prdconnectionstring = "Data Source=localhost;initial catalog=ttPRD;user id=sa;password=password;MultipleActiveResultSets=True"; var prd = GetTableNames(prdconnectionstring); string qasconnectionstring = "Data Source=localhost;initial catalog=ttqas;user id=sa;password=password;MultipleActiveResultSets=True"; var qas = GetTableNames(qasconnectionstring); CompareTable(prd, qas); } public static ListGetTableNames(string connectionstr) { var tableresult = new List (); string sqlTableName = "Select * From Information_Schema.Tables"; using (SqlConnection connection = new SqlConnection(connectionstr)) { using (SqlCommand cmd = new SqlCommand(sqlTableName, connection)) { try { connection.Open(); SqlDataReader dr = cmd.ExecuteReader();// while (dr.Read()) { // 表名 TableInfo table = new TableInfo(); table.TableName = dr["Table_Name"].ToString(); table.columns.AddRange(GetColumnNamesByTable(dr["Table_Name"].ToString(), connection)); tableresult.Add(table); } connection.Close(); } catch (System.Data.SqlClient.SqlException e) { Console.ForegroundColor = ConsoleColor.Red; Console.Error.WriteLine(e.Message); connection.Close(); } } return tableresult; } } public static List GetColumnNamesByTable(string tableName, SqlConnection connection) { var Columnresults = new List (); string sqlcolum = $"Select * From Information_Schema.Columns t Where t.Table_Name =\'{tableName}\'"; using (SqlCommand cmd = new SqlCommand(sqlcolum, connection)) { SqlDataReader dr = cmd.ExecuteReader();// while (dr.Read()) { // 表名 CloumnInfo column = new CloumnInfo(); column.CloumnName = dr["Column_name"].ToString(); column.DateType = dr["DATA_TYPE"].ToString() + dr["CHARACTER_MAXIMUM_LENGTH"].ToString(); Columnresults.Add(column); } return Columnresults; } } public static void CompareTable(List prd, List qas) { foreach (var p in qas) { var tablequery = prd.AsQueryable().Where(t => t.TableName.Equals(p.TableName)); if (!tablequery.Any()) { Console.WriteLine($"New Created Table {p.TableName}"); continue; } else { var querytable = tablequery.FirstOrDefault(); p.columns.ForEach(c => { var Cloumnquery = querytable.columns.Select(cc => cc.CloumnName).Contains(c.CloumnName); if (!Cloumnquery) { Console.WriteLine($"New add cloumn: {c.CloumnName} on Table {p.TableName}"); } else { var querycloumn = querytable.columns.Where(qt => qt.CloumnName.Equals(c.CloumnName)).FirstOrDefault(); if (!querycloumn.DateType.Equals(c.DateType)) { Console.WriteLine($"DateType Different: cloumn: {c.CloumnName} , {querycloumn.DateType}==>{c.DateType} on Table {p.TableName}"); } } }); } } } } public class TableInfo { public TableInfo() { columns = new List (); } public string TableName { get; set; } public List columns { get; set; } } public class CloumnInfo { public string CloumnName { get; set; } public string DateType { get; set; } } }
測試結(jié)果
以上是“SQL Server數(shù)據(jù)庫中表名稱、字段比較的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學習更多知識,歡迎關注創(chuàng)新互聯(lián)成都網(wǎng)站設計公司行業(yè)資訊頻道!
另外有需要云服務器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。