SQL Server数据库中表名和字段对比实例分析

分类:编程技术 时间:2024-02-20 15:32 浏览:0 评论:0
0
本文主要为大家展示《SQL Server数据库中表名和字段比较的示例分析》。内容简单、易懂、清晰。希望可以帮助您解答疑惑。让小编带领大家一起学习、学习吧。 《SQL Server数据库中表名与字段比较示例分析》一文。

前言

项目一般分为测试环境(QAS)和生产环境(PRD)。当我们的项目经历了一个较长的周期跨度更新后,当我们发布到生产环境时,第一个任务就是将新的表和字段更新到生产数据库中。很多时候,当我们发布更新时,很难记住进行了哪些更改。

当然有人会说,1.EF Code First有历史记录。这是一个方法。可靠吗?不可靠。我相信即使我使用Code First,我也绝对不是唯一一个直接更改数据库的人。

2.V查看实体类变更记录,这也是一种方式。如果使用 DB First 会怎样?当然可以看,但是很麻烦。

3、开发过程中,将变更记录到数据库中。我绝对不是唯一一个这样做过的人。手动狗头

。 。 。 。 。

中午,我正在考虑下个月更新的另一个项目。很多事情都改变了。那么数据库将如何更新呢?我只是想写一个工具来比较两个版本数据库、表名、字段、字段类型之间的差异。

就这么干吧(本来以为用EF、DBContext应该可以实现,但是我不擅长,所以最后又回到了ADO.Net)。

控制台应用程序,目前只能比较新增和修改的内容(SQl Server)。

使用 System;使用 System.Collections.Generic;使用 System.Data.SqlClient;使用 System.Linq;使用 System.Text;使用 Microsoft.EntityFrameworkCore;命名空间 EFGetTable{ 类 Program { static void Main(string[] args) {  string prdconnectionstring = "数据源=localhost;初始目录=ttPRD;用户 id=sa;密码=密码;MultipleActiveResultSets=True"; var prd = GetTableNames(prdconnectionstring); string qasconnectionstring = "数据源=localhost;初始目录=ttqas;用户id=sa;密码=密码;MultipleActiveResultSets=True"; var qas = GetTableNames(qasconnectionstring);比较表(prd,qas); } public static List GetTableNames(string connectionstr) { var tableresult = new List(); string sqlTableName = "从 Information_Schema.Tables 选择 *"; using (SqlConnection connection = new SqlConnection(connectionstr)) { using (SqlCommand cmd = new SqlCommand(sqlTableName, connection)) { try ())                                                         表名 ​​TableInfo table = new TableInfo(); table.TableName = dr["Table_Name"].ToString();表.columns.AddRange(GetColumnNamesByTable(dr["Table_Name"].ToString(), 连接));表结果。添加(表); } P; CATCH (System.data.SqLClient.sqlException E) {console.Foregroundcolor = consoleColor.red; console.error.writeline );;} 返回表结果 ; } } public static List GetColumnNamesByTable(string tableName, SqlConnection 连接) { var Columnresults = new List(); string sqlcolum = $"Select * From Information_Schema.Columns tWhere 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(列);返回列结果; } } 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($"新创建的表 { p.TableName}");继续; } else { var querytable = tablequery.FirstOrDefault(); p.columns.ForEach(c => { var Cloumnquery = querytable.columns.Select(cc => cc.CloumnName ).Contains( c.CloumnName); if (!Cloumnquery) { Console.WriteLine($"新添加 cloumn: {c.CloumnName}  在表 {p.tableename} 上 ");} Else {var QueryCloumn = querytable.columns.where (qt => qt.cloumname.equals).FirstRestOfau lt (); if (!QueryCloumn.dateType.Equals (c.DateType)) {        Console.WriteLine($"DateType 不同:表 {p.TableName} 上的 cloumn: {c.CloumnName}, {querycloumn.DateType}==>{c.DateType}"); }); } } } } } public class TableInfo { public TableInfo() { columns = new List(); } 公共字符串表名 { get;放; } public List columns { get;放; } } 公共类 CloumnInfo { 公共字符串 CloumnName { 获取;放; } 公共字符串日期类型 { 获取 ;放; } }}

测试结果

以上就是《SQL Server数据库中表名与字段比较示例分析》总之,感谢您阅读本文!相信大家都有一定的了解,希望分享的内容对大家有所帮助。如果您想了解更多知识,请关注行业资讯频道!

1. 本站所有资源来源于用户上传或网络,仅作为参考研究使用,如有侵权请邮件联系站长!
2. 本站积分货币获取途径以及用途的解读,想在本站混的好,请务必认真阅读!
3. 本站强烈打击盗版/破解等有损他人权益和违法作为,请各位会员支持正版!
4. 编程技术 > SQL Server数据库中表名和字段对比实例分析

用户评论