zoukankan      html  css  js  c++  java
  • SQL比较两表字段和字段类型

    一、问题

    业务需要把TB_Delete_KYSubProject表数据恢复到TB_KYSubProject,但提示错误,错误原因是两表字段类型存在不一致

    insert into [TB_KYSubProject] SELECT * from [TB_Delete_KYSubProject]   
    WHERE   [TB_Delete_KYSubProject].id = 'A49CFC7B-8F9D-476F-B853-CA62C18E2D03'

    二、方法

    一个个字段比对很麻烦,所以用以下sql 查询出两表字段不一致

    可以用查询表的字段信息

    SELECT  OBJECT_NAME(c.object_id) AS TableName ,
            c.name AS ColumnsName ,
            t.name AS ColumnType ,
            c.max_length AS Length
    FROM    sys.columns c
            INNER JOIN systypes t ON c.system_type_id = t.xtype
    WHERE   c.object_id = OBJECT_ID('TB_Delete_KYSubProject')
            AND T.NAME <> 'sysname'
    SELECT  c.name AS ColumnsName ,
            t.name AS ColumnType ,
            c.max_length AS Length
    FROM    sys.columns c
            INNER JOIN systypes t ON c.system_type_id = t.xtype
    WHERE   c.object_id = OBJECT_ID('TB_Delete_KYSubProject')
            AND T.NAME <> 'sysname'
    EXCEPT
    SELECT  c.name AS ColumnsName ,
            t.name AS ColumnType ,
            c.max_length AS Length
    FROM    sys.columns c
            INNER JOIN systypes t ON c.system_type_id = t.xtype
    WHERE   c.object_id = OBJECT_ID('TB_KYSubProject')
            AND T.NAME <> 'sysname'

     得到两个表具体哪里不一致

    SELECT  OBJECT_NAME(c.object_id) AS TableName ,
            c.name AS ColumnsName ,
            t.name AS ColumnType ,
            c.max_length AS Length
    FROM    sys.columns c
            INNER JOIN systypes t ON c.system_type_id = t.xtype
    WHERE   c.object_id = OBJECT_ID('TB_Delete_KYSubProject')
            AND T.NAME <> 'sysname'
            AND c.name IN ( 'FrequencyCount', 'IsDelete', 'PortNumber' )
    
    SELECT  OBJECT_NAME(c.object_id) AS TableName ,
            c.name AS ColumnsName ,
            t.name AS ColumnType ,
            c.max_length AS Length
    FROM    sys.columns c
            INNER JOIN systypes t ON c.system_type_id = t.xtype
    WHERE   c.object_id = OBJECT_ID('TB_KYSubProject')
            AND T.NAME <> 'sysname'
            AND c.name IN ( 'FrequencyCount', 'IsDelete', 'PortNumber' )

    扩展:

    获取表字段说明

    SELECT  c.name AS ColumnsName ,
            t.name AS ColumnType ,
            c.max_length AS Length ,
            CAST(ep.[value] AS VARCHAR(100)) AS [字段说明]
    FROM    sys.columns c
            INNER JOIN systypes t ON c.system_type_id = t.xtype
            LEFT JOIN sys.extended_properties AS ep ON ep.major_id = c.object_id
                                                       AND ep.minor_id = c.column_id
    WHERE   c.object_id = OBJECT_ID('TB_Delete_SJSubProject')
            AND T.NAME <> 'sysname'
            AND ep.class = 1 

    学习,以记之。如有错漏,欢迎指正

    作者:冯子武
    出处:http://www.cnblogs.com/Zev_Fung/
    本文版权归作者和博客园所有,欢迎转载,转载请标明出处。
    如果博文对您有所收获,请点击下方的 [推荐],谢谢

  • 相关阅读:
    003_饿了么chaosmonkey实现
    mysql-5.7 innodb_buffer_pool刷新机制详解
    mysql-5.7中的innodb_buffer_pool_prefetching(read-ahead)详解
    mysql-5.7中innodb_buffer_pool页面淘汰算法
    scrapy 的一个例子
    scrapy 的框架的安装
    python 例程的一个好例子
    django中跨app引用model
    用ansible 完成一次性的工作(ad-Hoc)工作
    django 在建模时的一个手贱
  • 原文地址:https://www.cnblogs.com/Zev_Fung/p/8080726.html
Copyright © 2011-2022 走看看