sqlserver表值函数用法(SQL Server数据库中的表名称、字段比较)
类别:数据库 浏览量:707
时间:2021-10-14 00:28:25 sqlserver表值函数用法
SQL Server数据库中的表名称、字段比较前言
项目中一般分测试环境(QAS),生产环境(PRD),当我们的项目经历了一次周期跨度较长的更新后,当我们发布到生产环境时,首要的任务是将新增的表,字段更新到生产数据库。很多时候,当我们发布更新的时候,已经很难记得做了哪些变更。
当然有的人会说,1.EF Code First 有history记录,这是一种办法,可靠么?不可靠。相信即便是用Code First,直接改数据库的肯定不止我一个。
2.查看实体类变更记录,这也是一个办法。那如果用的DB First的呢?当然也可以看,就是很麻烦。
3.开发过程中,对数据库的变更记下来。这么做过的肯定也不止我一个。手动狗头
。。。。。
中午的时候,就想着另外一个项目下个月要更新,改了N多的东西,到时候数据库咋更新呢。就想着写个工具比较两个版本数据库,表名称,字段,字段类型的区别。
说干就干(本来想着用EF,DBContext应该可以实现,无奈学艺不精,最终还是回到了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 List<TableInfo> GetTableNames(string connectionstr) { var tableresult = new List<TableInfo>(); 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<CloumnInfo> GetColumnNamesByTable(string tableName, SqlConnection connection) { var Columnresults = new List<CloumnInfo>(); 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<TableInfo> prd, List<TableInfo> 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<CloumnInfo>(); } public string TableName { get; set; } public List<CloumnInfo> columns { get; set; } } public class CloumnInfo { public string CloumnName { get; set; } public string DateType { get; set; } } }
测试结果
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对开心学习网的支持。
您可能感兴趣
- mybatis执行sql源码解析(mybatis调用sqlserver存储过程返回结果集的方法)
- linux安装sqlserver 2008 r2(Ubuntu 下安装SQL Server教程)
- sqlserver删除表的第一行数据(sql server删除前1000行数据的方法实例)
- sqlserver自增长id重置(SQL server 自增ID--序号自动增加的字段操作)
- sqlserver降序排列(SQL SERVER临时表排序问题的解决方法)
- sqlserver字段增加删减(关于SQL Server中bit类型字段增删查改的一些事)
- sqlserver安装与使用教程(SQL Server 2017 Developer的下载、安装、配置及SSMS的下载安装配置图文教程详解)
- sqlserver改表结构不允许(SQL Server阻止保存修改表结构的解决方法)
- sqlserver数据库技术及应用教程(SQLServer2019 数据库的基本使用之图形化界面操作的实现)
- sqlserver 使用SSMS运行sql脚本的六种方法(sqlserver 使用SSMS运行sql脚本的六种方法)
- SQLServer日期函数总结案例详解(SQLServer日期函数总结案例详解)
- sqlserver纵表变横表(SQL Server行转列的方法解析)
- sql server 进阶(SqlServer AS的用法)
- sqlserver恢复delete数据(SQL Server数据库的三种恢复模式:简单恢复模式、完整恢复模式和大容量日志恢)
- 如何使用sqlserver建立数据表(SqlServer编写数据库表的操作方式建库、建表、修改语句)
- sqlserver判断null(SQL Server索引超出了数组界限的解决方案)
- 爱情可以当饭吃吗(怎么回复)
- 高考数学题(高考数学题基础题占多少分)
- 没钱只能吃土(没钱要吃土了幽默短信发朋友圈)
- 今年考高会很难吗(今年高考会考试吗)
- 盘古开天地 他创造了世界,谁创造了盘古 盘古是伏羲吗(盘古开天地他创造了世界)
- 关于队徽 你了解这些么 二(关于队徽你了解这些么)
热门推荐
- nginxrewrite有什么功能(Nginx Rewrite使用场景及代码案例详解)
- dedecms滚动代码(dedecms使用sql语句调用文章静态链接地址的方法)
- 微信小程序css使用技巧(微信小程序 CSS filter滤镜的使用示例详解)
- laravel获取访问来路的函数(Laravel实现搜索的时候分页并携带参数)
- python之pil模块使用(Python3安装Pillow与PIL的方法)
- wamp系统设置教程(浅谈本地WAMP环境的搭建)
- javascript的执行顺序
- 网站图片防盗链的常见方法
- python的turtle库怎么画同心圆(详解python使用turtle库来画一朵花)
- 用css实现滚动效果(CSS完成视差滚动效果)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9