using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
using System.Diagnostics; namespace SyncDatabaseColumnDescription
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
} private void Form1_Load(object sender, EventArgs e)
{
var ssb = new SqlConnectionStringBuilder();
ssb.DataSource = @".\SQL2008";
ssb.UserID = "sa";
ssb.Password = "firstelite";
ssb.InitialCatalog = "OMSDB";
using (var connection = new SqlConnection(ssb.ConnectionString))
{
connection.Open();
var tableList = GetTableList(connection); foreach (var table in tableList)
{ var fieldList = GetFieldList(connection, table);
foreach (var field in fieldList)
{
var desc = GetFieldDescription(connection, table, field);
if (desc != null)
Debug.Print(table + " -> " + field + ":" + desc);
}
}
}
} private void UpdateFieldDescription()
{
var ssb = new SqlConnectionStringBuilder();
ssb.DataSource = @".\SQL2008";
ssb.UserID = "**";
ssb.Password = "****";
ssb.InitialCatalog = "OMSDB_WITH_MEMO";
using (var connection = new SqlConnection(ssb.ConnectionString))
{
connection.Open();
var tableList = GetTableList(connection); ssb.InitialCatalog = "OMSDB";
using (var connection2 = new SqlConnection(ssb.ConnectionString))
{
connection2.Open(); var tableList2 = GetTableList(connection2); foreach (var table in tableList)
{
if (!tableList2.Any(t => t == table))
continue; var fieldList = GetFieldList(connection, table);
var fieldList2 = GetFieldList(connection2, table); foreach (var field in fieldList)
{
if (!fieldList2.Any(f => f == field))
continue; var desc = GetFieldDescription(connection, table, field);
if (string.IsNullOrWhiteSpace(desc))
continue; var desc2 = GetFieldDescription(connection2, table, field);
if (desc2 != null)
UpdateFieldDescription(connection2, table, field, desc);
else
AddFieldDescription(connection2, table, field, desc);
}
} }
}
} private List<string> GetTableList(SqlConnection connection)
{
var tableList = new List<string>();
using (var cmd = new SqlCommand(@"
SELECT TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'BASE TABLE'
ORDER BY TABLE_NAME", connection))
{
using (var reader = cmd.ExecuteReader())
{
while (reader.Read())
{
tableList.Add(reader[].ToString());
}
}
}
return tableList;
} private List<string> GetFieldList(SqlConnection connection, string tableName)
{
var fieldList = new List<string>();
using (var cmd = new SqlCommand("SELECT * FROM [" + tableName + "] WHERE 1=2", connection))
{
using (var reader = cmd.ExecuteReader())
{
for (var i = ; i < reader.FieldCount; i++)
fieldList.Add(reader.GetName(i));
}
}
return fieldList;
} private string GetFieldDescription(SqlConnection connection, string tableName, string fieldName)
{
using (var cmd = new SqlCommand(@"SELECT g.[value]
FROM dbo.syscolumns A
INNER JOIN dbo.sysobjects D
ON A.id = D.id
AND D.xtype = 'U'
AND D.name <> 'dtproperties'
INNER JOIN sys.extended_properties G
ON A.id = G.major_id
AND A.colid = G.minor_id
WHERE D.name = '" + tableName + @"'
AND A.name='" + fieldName + @"'", connection))
{
var ret = cmd.ExecuteScalar();
if (ret == null)
return null;
return ret.ToString();
}
} private bool AddFieldDescription(SqlConnection connection, string tableName, string filedName, string description)
{
using (var cmd = new SqlCommand(@"EXECUTE sp_addextendedproperty N'MS_Description', '" + description.Replace("'","''")
+ "', N'user', N'dbo', N'table', N'" + tableName + "', N'column', N'" + filedName + "' ", connection))
{
return cmd.ExecuteNonQuery() > ;
}
} private bool UpdateFieldDescription(SqlConnection connection, string tableName, string filedName, string description)
{
using (var cmd = new SqlCommand(@"EXECUTE sp_updateextendedproperty N'MS_Description', '" + description.Replace("'", "''")
+ "', N'user', N'dbo', N'table', N'" + tableName + "', N'column', N'" + filedName + "' ", connection))
{
return cmd.ExecuteNonQuery() > ;
}
}
}
}

C# 更新SQL Server数据库备注信息从另一数据库的更多相关文章

  1. SQL Server 查询表备注信息的语句

    --name   字段名称--user_type_id --max_length 最大长度--is_nullable 是否允许空--remark  描述SELECT c.name, c.user_ty ...

  2. 解决 U2000 R017 安装报错: 检查SQL server数据库环境变量信息 ( 异常 ) [ 详细信息 ] PATH环境变量中缺少数据库路径的信息

    U2000 R017 安装报错: 检查SQL server数据库环境变量信息 ( 异常 ) [ 详细信息 ] PATH环境变量中缺少数据库路径的信息 管理员模式打开注册表位置: HKEY_LOCAL_ ...

  3. 如何有效抓取SQL Server的BLOCKING信息

    原文:如何有效抓取SQL Server的BLOCKING信息 转自:微软亚太区数据库技术支持组 官方博客 http://blogs.msdn.com/b/apgcdsd/archive/2011/12 ...

  4. sql server登录名、服务器角色、数据库用户、数据库角色、架构区别联系

    原创链接:https://www.cnblogs.com/lxf1117/p/6762315.html sql server登录名.服务器角色.数据库用户.数据库角色.架构区别联系 1.一个数据库用户 ...

  5. SQL Server删除表信息的三种方法

    1.使用DELETE实现SQL Server删除表信息 (1)删除表中的全部信息 USE student GO DELETE student      --不加where条件,删除表中的所有记录 go ...

  6. 【转】SQL Server、Oracle、MySQL和Vertica数据库常用函数对比

    SQL Server.Oracle.MySQL和Vertica数据库常用函数对比 Vertica数据库是HP公司新收购的用于BI方面的数据库. 1. 绝对值 S:select abs(-1) valu ...

  7. 使用SQL Server 2008的事务日志传送功能备份数据库(logshiping)

    使用SQL Server 2008的事务日志传送功能备份数据库(logshiping) 使用SQL Server 2008的事务日志传送功能备份数据库(logshiping)

  8. 利用SQL Server Management Studio(SSMS)复制数据库

    利用SQL Server Management Studio(SSMS)复制数据库 标签(空格分隔): SQLServer 前言 今天由于客户购买的软件版本确认了,而之前进行开发的本地数据库版本较低, ...

  9. 监控目前所有连接SQL SERVER的用户信息

    原文:监控目前所有连接SQL SERVER的用户信息 if object_id('p_getlinkinfo','P')is not null drop proc p_getlinkinfo go c ...

随机推荐

  1. goldengate for big data 12.3发布

    主要新增特性:通用JDBC目标端:支持Amazon Redshift & IBM Netezza Oracle GoldenGate for Big Data 12.3现在支持通用的JDBC目 ...

  2. css 水平居中垂直居中的几种方法

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. TOMCAT运行一段时间后网页无响应或连不上,TOMCAT无错误日志

    解决方法:修改 tomcat 的 java options 参数1)增加java options参数-Xmn384m-XX:MaxPermSize=128m-XX:+UseConcMarkSweepG ...

  4. String类和StringBuffer类的区别

    首先,String和StringBuffer主要有2个区别: (1)String类对象为不可变对象,一旦你修改了String对象的值,隐性重新创建了一个新的对象,释放原String对象,StringB ...

  5. JS总结 本地对象1

    Data对象 用于获取当前时间的对象 例如,要用该对象输出:  2016年9月7日 10:57 星期三   这样格式的时间 var time=new Date(), month=time.getMon ...

  6. 国内app快速生成平台对比

     泰格老虎 2013-03-07 00:39:10 这是海恒CEO高鹏写的一篇国内app快速生成平台对比文章,介绍了国内快速生成APP的平台与自己平台的对比,很有参考价值. 同类网站 安米网 http ...

  7. 利用NABCD模型进行竞争性需求分析

    微博的NABCD模型 N-Need:毫无疑问,当今的中国普通民众是有这点需求的,在上个世纪中国民众的休闲娱乐方式更多的停留在以电视传媒为主的娱乐方式,而进入21世纪以来中国民众的娱乐中心向互联网转移, ...

  8. 使用恶意USB设备解锁 Windows & Mac 锁屏状态

    NSA专业物理入侵设备——USB Armory,可解锁任意锁屏状态的下的Windows和Mac操作系统,含最新发布的Windows10.及较早的Mac OSX El Capitan / Maveric ...

  9. 从log中分析Android wif连接状态的方法

    1.这里是从log中通过搜索关键字wpa_supplicant: wlan0: State过滤之后的log: Line 1: 11-25 20:10:14.968120  1104  1104 D w ...

  10. Android 游戏教程让人物动起来

    在这里给大家分享Android游戏教程怎样让人物动起来,话不多说了,直接进入正题. 一. 准备工作     首先要准备好要使用的人物动作图和地形图.把它分割成16个不同的动作,循环播放同一行的4个不同 ...