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[0].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 = 0; 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() > 0;
            }
        }

        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() > 0;
            }
        }
    }
}
时间: 2024-09-30 06:26:29

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

SQL Server 查找统计信息的采样时间与采样比例

原文:SQL Server 查找统计信息的采样时间与采样比例 有时候我们会遇到,由于统计信息不准确导致优化器生成了一个错误的执行计划(或者这样表达:一个较差的执行计划),从而引起了系统性能问题.那么如果我们怀疑这个错误的执行计划是由于统计信息不准确引起的.那么我们如何判断统计信息不准确呢?当然首先得去查看实际执行计划中,统计信息的相关数据是否与实际情况有较大的出入,下面我们抛开这个大命题,仅仅从统计信息层面去查看统计信息的更新时间,统计信息的采样行数.采样比例等情况. 1:首先,我们要查查统计信

SQL Server 【附】创建&quot;商品管理数据库&quot;、&quot;学生选课数据库&quot;的SQL语句

附:(创建“商品管理数据库”的SQL语句) --建立"商品管理数据库"数据库-- create database 商品管理数据库 on(name='商品管理数据库_m', filename='D:\商品管理系统\商品管理数据库_m.mdf', size=6mb,filegrowth=1mb,maxsize=unlimited) log on(name='商品管理数据库_l', filename='D:\商品管理系统\商品管理数据库_l.ldf', size=1,filegrowth=1

SQL Server 中统计信息直方图中对于没有覆盖到谓词预估以及预估策略的变化(SQL2012--&gt;SQL2014--&gt;SQL2016)

原文:SQL Server 中统计信息直方图中对于没有覆盖到谓词预估以及预估策略的变化(SQL2012-->SQL2014-->SQL2016) 本文出处:http://www.cnblogs.com/wy123/p/6770258.html 统计信息写过几篇了相关的文章了,感觉还是不过瘾,关于统计信息的问题,最近又踩坑了,该问题虽然不算很常见,但也比较有意思.相对SQL Server 2012,发现在新的SQL Server版本(2014,2016)中都有一些明显的变化,下文将对此进行粗浅的

SQL Server 审核(Audit)-- 审核对数据库对象的访问

SQL Server 审核(Audit)-- 审核对数据库对象的访问 任务1:创建登录账户,授予适当的权限 步骤1:打开SSMS,输入如下语句,创建登录账户UltraSQL,授予访问AdventureWorks2012数据库的Person.Person和Person.Password权限. USE master GO --Create Login UltraSQL CREATE LOGIN UltraSQL WITH PASSWORD=N'Mpdfzh7', DEFAULT_DATABASE=A

SQL Server DDL 触发器(Trigger)-- 创建数据库级别的DDL触发器

SQL Server DDL 触发器(Trigger)-- 创建数据库级别的DDL触发器 以下针对某个数据库在创建数据表时调用触发器,并将创建该数据表的用户账户写入到Windows的Event Log中. CREATE TRIGGER reminder ON DATABASE FOR CREATE_TABLE AS DECLARE @str NVARCHAR(100) SET @str=suser_sname() + N'create a new table' RAISERROR(@str,10

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

原文:如何有效抓取SQL Server的BLOCKING信息 转自:微软亚太区数据库技术支持组 官方博客 http://blogs.msdn.com/b/apgcdsd/archive/2011/12/12/sql-server-blocking.aspx SQL Server允许并发操作,BLOCKING是指在某一操作没有完成之前,其他操作必须等待,以便于保证数据的完整性.BLOCKING的解决方法要查看BLOCKING的头是什么,为什么BLOCKING头上的语句执行的很慢.通常来讲只要我们能

功能齐全、效率一流的免费开源数据库导入导出工具(c#开发,支持SQL server、SQLite、ACCESS三种数据库),每月借此处理数据5G以上

软件名:DataPie 功能:支持SQL server.SQLite.ACCESS数据库的导入.导出.存储过程调用,支持EXCEL2007.EXCEL2003.ACCESS2007. CSV文件导入数据库,支持EXCEL.CSV.ZIP.ACCESS文件方式导出,支持数据拆分导出及自定义SQL查询与导出. 开发背景:作者从事财务管理工作,主要是出具集团的内部财务报表,随着公司精细化管理的需求,管理报表的数据量急速增长, 依赖EXCEL加工处理数据已经变得极为困难,因此团队全面转向关系数据库进行数

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

1.使用DELETE实现SQL Server删除表信息 (1)删除表中的全部信息 USE student GO DELETE student      --不加where条件,删除表中的所有记录 go (2)删除表中符合条件的记录 USE student GO DELETE student where Id='001'    --删除表中符合条件的记录 GO 2.使用TRUNCATE删除表中的信息 USE student GO TRUNCATE TABLE    student   --删除表中

sql server 警报管理,实时监听数据库动向,运筹帷幄之中

原文:sql server 警报管理,实时监听数据库动向,运筹帷幄之中 工作这么多年了,无论是身边的同学还是同事,发现只要搞程序员的都有一个通病---懒.懒到谁都不愿意加班,尤其是"义务"加班.即使大家都不愿意加班,但是很多时候项目赶着上线或者上线之后出错啊什么的,总得有人看着,这时候就诞生了一种新的工作制度,叫做7*24.顾名思义就是这种岗位实时都得有人看着,这确实是一件让人头疼的事情.虽然说在项目刚上线不可避免的得有7*24,但是我们可以尽量减少7*24的工作量(ps:因为7*24