C# 更新SQL Server数据库备注信息从另一数据库
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数据库备注信息从另一数据库的更多相关文章
- SQL Server 查询表备注信息的语句
--name 字段名称--user_type_id --max_length 最大长度--is_nullable 是否允许空--remark 描述SELECT c.name, c.user_ty ...
- 解决 U2000 R017 安装报错: 检查SQL server数据库环境变量信息 ( 异常 ) [ 详细信息 ] PATH环境变量中缺少数据库路径的信息
U2000 R017 安装报错: 检查SQL server数据库环境变量信息 ( 异常 ) [ 详细信息 ] PATH环境变量中缺少数据库路径的信息 管理员模式打开注册表位置: HKEY_LOCAL_ ...
- 如何有效抓取SQL Server的BLOCKING信息
原文:如何有效抓取SQL Server的BLOCKING信息 转自:微软亚太区数据库技术支持组 官方博客 http://blogs.msdn.com/b/apgcdsd/archive/2011/12 ...
- sql server登录名、服务器角色、数据库用户、数据库角色、架构区别联系
原创链接:https://www.cnblogs.com/lxf1117/p/6762315.html sql server登录名.服务器角色.数据库用户.数据库角色.架构区别联系 1.一个数据库用户 ...
- SQL Server删除表信息的三种方法
1.使用DELETE实现SQL Server删除表信息 (1)删除表中的全部信息 USE student GO DELETE student --不加where条件,删除表中的所有记录 go ...
- 【转】SQL Server、Oracle、MySQL和Vertica数据库常用函数对比
SQL Server.Oracle.MySQL和Vertica数据库常用函数对比 Vertica数据库是HP公司新收购的用于BI方面的数据库. 1. 绝对值 S:select abs(-1) valu ...
- 使用SQL Server 2008的事务日志传送功能备份数据库(logshiping)
使用SQL Server 2008的事务日志传送功能备份数据库(logshiping) 使用SQL Server 2008的事务日志传送功能备份数据库(logshiping)
- 利用SQL Server Management Studio(SSMS)复制数据库
利用SQL Server Management Studio(SSMS)复制数据库 标签(空格分隔): SQLServer 前言 今天由于客户购买的软件版本确认了,而之前进行开发的本地数据库版本较低, ...
- 监控目前所有连接SQL SERVER的用户信息
原文:监控目前所有连接SQL SERVER的用户信息 if object_id('p_getlinkinfo','P')is not null drop proc p_getlinkinfo go c ...
随机推荐
- Android中ListView控件的使用
Android中ListView控件的使用 ListView展示数据的原理 在Android中,其实ListView就相当于web中的jsp,Adapter是适配器,它就相当于web中的Servlet ...
- 【转】 Linux shell的&&和||
http://www.2cto.com/os/201302/189655.html Linux shell的&&和|| shell 在执行某个命令的时候,会返回一个返回值,该返回值 ...
- JQ源码学习-1-无new构建
此文章仅为个人学习 Aaron的jQuery源码分析 笔记之用. 一:采用 构造函数 返回 原型初始化方法,原型初始化方法又返回构造函数 的方式代替new 但当 返回的却是‘web’而不是Object ...
- [转]XSS现代WAF规则探测及绕过技术
初始测试 1.使用无害的payload,类似<b>,<i>,<u>观察响应,判断应用程序是否被HTML编码,是否标签被过滤,是否过滤<>等等: 2.如果 ...
- 生成highcharts报表时对数据没有用= eval('([' + seriesArray+ '])')处理生成数组,而是简单的拼成字符串,结果导致大量的场景出现
<script type="text/javascript"> //异步初始周达成率趋势图信息 function goFinishQuery() { var yearN ...
- 4 多表代替密码之Hill 密码 2实现
该解密方法的KEY 不是一个数或者一段字符串,而是一个矩阵, 比如有个3*3的KEY: 那么如果我们要加密一个长度为N的字符串, 那么把N除以3,分成M个3个字母组成的小段, 对每个小段尽心加密: 1 ...
- ios网络请求特殊字符&处理
原文地址:http://www.xuebuyuan.com/2039420.html CFURLCreateStringByAddingPercentEscapes 在作项目的的时候,一般都要用到网络 ...
- 【转】Duff's Device
在看strcpy.memcpy等的实现发现用了内存对齐,每一个word拷贝一次的办法大大提高了实现效率,参加该blog(http://totoxian.iteye.com/blog/1220273). ...
- C++深拷贝与浅拷贝
当用一个已初始化过了的自定义类类型对象去初始化另一个新构造的对象的时候,拷贝构造函数就会被自动调用.也就是说,当类的对象需要拷贝时,拷贝构造函数将会被调用.以下情况都会调用拷贝构造函数: (1)一个对 ...
- 关于JAVA的数据转换总结
数据转换在编程里面是十分常用的,将平常可能用到的数据转换类型总结起来会在以后码代码的过程中有很大帮助. 在数据转换之前,需要明白的是基础数据类型的自动转换和强制转换.接下来就先从数据类型的容量讲起. ...