日韩av手机在线免费观看_四虎免看黄_亚洲一区中文字幕_亚洲小视频网站_国产一区日韩在线_国产欧美精品一区二区

下載吧 - 綠色安全的游戲和軟件下載中心

軟件下載吧

當(dāng)前位置:軟件下載吧 > 數(shù)據(jù)庫 > MS_SQL > SQL Server數(shù)據(jù)庫中如何比較表名稱、字段

SQL Server數(shù)據(jù)庫中如何比較表名稱、字段

時間:2024-02-04 13:45作者:下載吧人氣:39

前言

項目中一般分測試環(huán)境(QAS),生產(chǎn)環(huán)境(PRD),當(dāng)我們的項目經(jīng)歷了一次周期跨度較長的更新后,當(dāng)我們發(fā)布到生產(chǎn)環(huán)境時,首要的任務(wù)是將新增的表,字段更新到生產(chǎn)數(shù)據(jù)庫。很多時候,當(dāng)我們發(fā)布更新的時候,已經(jīng)很難記得做了哪些變更。

當(dāng)然有的人會說,1.EF Code First 有history記錄,這是一種辦法,可靠么?不可靠。相信即便是用Code First,直接改數(shù)據(jù)庫的肯定不止我一個。

 2.查看實(shí)體類變更記錄,這也是一個辦法。那如果用的DB First的呢?當(dāng)然也可以看,就是很麻煩。

 3.開發(fā)過程中,對數(shù)據(jù)庫的變更記下來。這么做過的肯定也不止我一個。手動狗頭

  。。。。。

中午的時候,就想著另外一個項目下個月要更新,改了N多的東西,到時候數(shù)據(jù)庫咋更新呢。就想著寫個工具比較兩個版本數(shù)據(jù)庫,表名稱,字段,字段類型的區(qū)別。

說干就干(本來想著用EF,DBContext應(yīng)該可以實(shí)現(xiàn),無奈學(xué)藝不精,最終還是回到了ADO.Net)。

控制臺應(yīng)用程序,目前只能對比新增,修改(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; }

}
}

標(biāo)簽MSSQL,SQLServer,技術(shù)文檔,數(shù)據(jù)庫,SQLSERVER

相關(guān)下載

查看所有評論+

網(wǎng)友評論

網(wǎng)友
您的評論需要經(jīng)過審核才能顯示

熱門閱覽

最新排行

公眾號

主站蜘蛛池模板: 日韩精品成人免费观看视频 | 国产精品婷婷 | 日本中文字幕在线观看 | 久久成人亚洲 | 欧美精品首页 | 精品视频国产 | 久久精品欧美一区二区三区不卡 | 久久99蜜桃综合影院免费观看 | 精品一二三区视频 | 一本一道久久a久久精品蜜桃 | 欧美成人精品 | 精品一区二区久久久久久久网精 | 成人av网站在线观看 | 黄免费观看视频 | 中文字幕99 | 亚洲综合伊人 | 日韩视频在线免费观看 | 亚洲一区二区三区免费在线观看 | 日本精品视频一区二区 | 99久久久国产精品 | 九九爱这里只有精品 | 盗摄精品av一区二区三区 | 日韩欧美一区二区三区在线播放 | 亚洲欧美在线视频 | 中文字幕精品一区二区三区精品 | 野狼在线社区2017入口 | 拍拍无遮挡人做人爱视频免费观看 | 午夜精品久久久久久久久久久久久 | 午夜免费福利片 | 国产精品久久久久久久久久免费看 | 欧美最猛黑人 | 激情视频网站 | 亚洲免费大片 | 亚洲国产视频一区 | 久久久久久久成人 | 欧洲精品在线观看 | 日韩欧美精品在线 | 亚洲精品九九 | 国产精品久久久久久久久久 | 日本成人久久 | 欧美成人久久 |