这篇文章主要介绍“SQL Server数据库中的表名称和字段实例分析”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“SQL Server数据库中的表名称和字段实例分析”文章能帮助大家解决问题。

前言

项目中一般分测试环境(QAS),生产环境(PRD),当我们的项目经历了一次周期跨度较长的更新后,当我们发布到生产环境时,首要的任务是将新增的表,字段更新到生产数据库。很多时候,当我们发布更新的时候,已经很难记得做了哪些变更。

当然有的人会说,1.EF Code First 有history记录,这是一种办法,可靠么?不可靠。相信即便是用Code First,直接改数据库的肯定不止我一个。

2.查看实体类变更记录,这也是一个办法。那如果用的DB First的呢?当然也可以看,就是很麻烦。

3.开发过程中,对数据库的变更记下来。这么做过的肯定也不止我一个。

想着另外一个项目下个月要更新,改了N多的东西,到时候数据库咋更新呢。就想着写个工具比较两个版本数据库,表名称,字段,字段类型的区别。

说干就干(本来想着用EF,DBContext应该可以实现,无奈学艺不精,最终还是回到了ADO.Net)。

控制台应用程序,目前只能对比新增,修改(SQl Server)。

usingSystem;usingSystem.Collections.Generic;usingSystem.Data.SqlClient;usingSystem.Linq;usingSystem.Text;usingMicrosoft.EntityFrameworkCore;namespaceEFGetTable{classProgram{staticvoidMain(string[]args){stringprdconnectionstring="DataSource=localhost;initialcatalog=ttPRD;userid=sa;password=password;MultipleActiveResultSets=True";varprd=GetTableNames(prdconnectionstring);stringqasconnectionstring="DataSource=localhost;initialcatalog=ttqas;userid=sa;password=password;MultipleActiveResultSets=True";varqas=GetTableNames(qasconnectionstring);CompareTable(prd,qas);}publicstaticList<TableInfo>GetTableNames(stringconnectionstr){vartableresult=newList<TableInfo>();stringsqlTableName="Select*FromInformation_Schema.Tables";using(SqlConnectionconnection=newSqlConnection(connectionstr)){using(SqlCommandcmd=newSqlCommand(sqlTableName,connection)){try{connection.Open();SqlDataReaderdr=cmd.ExecuteReader();//while(dr.Read()){//表名TableInfotable=newTableInfo();table.TableName=dr["Table_Name"].ToString();table.columns.AddRange(GetColumnNamesByTable(dr["Table_Name"].ToString(),connection));tableresult.Add(table);}connection.Close();}catch(System.Data.SqlClient.SqlExceptione){Console.ForegroundColor=ConsoleColor.Red;Console.Error.WriteLine(e.Message);connection.Close();}}returntableresult;}}publicstaticList<CloumnInfo>GetColumnNamesByTable(stringtableName,SqlConnectionconnection){varColumnresults=newList<CloumnInfo>();stringsqlcolum=$"Select*FromInformation_Schema.ColumnstWheret.Table_Name=\'{tableName}\'";using(SqlCommandcmd=newSqlCommand(sqlcolum,connection)){SqlDataReaderdr=cmd.ExecuteReader();//while(dr.Read()){//表名CloumnInfocolumn=newCloumnInfo();column.CloumnName=dr["Column_name"].ToString();column.DateType=dr["DATA_TYPE"].ToString()+dr["CHARACTER_MAXIMUM_LENGTH"].ToString();Columnresults.Add(column);}returnColumnresults;}}publicstaticvoidCompareTable(List<TableInfo>prd,List<TableInfo>qas){foreach(varpinqas){vartablequery=prd.AsQueryable().Where(t=>t.TableName.Equals(p.TableName));if(!tablequery.Any()){Console.WriteLine($"NewCreatedTable{p.TableName}");continue;}else{varquerytable=tablequery.FirstOrDefault();p.columns.ForEach(c=>{varCloumnquery=querytable.columns.Select(cc=>cc.CloumnName).Contains(c.CloumnName);if(!Cloumnquery){Console.WriteLine($"Newaddcloumn:{c.CloumnName}onTable{p.TableName}");}else{varquerycloumn=querytable.columns.Where(qt=>qt.CloumnName.Equals(c.CloumnName)).FirstOrDefault();if(!querycloumn.DateType.Equals(c.DateType)){Console.WriteLine($"DateTypeDifferent:cloumn:{c.CloumnName},{querycloumn.DateType}==>{c.DateType}onTable{p.TableName}");}}});}}}}publicclassTableInfo{publicTableInfo(){columns=newList<CloumnInfo>();}publicstringTableName{get;set;}publicList<CloumnInfo>columns{get;set;}}publicclassCloumnInfo{publicstringCloumnName{get;set;}publicstringDateType{get;set;}}}

关于“SQL Server数据库中的表名称和字段实例分析”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注亿速云行业资讯频道,小编每天都会为大家更新不同的知识点。