• 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/
    本文版权归作者和博客园所有,欢迎转载,转载请标明出处。
    如果博文对您有所收获,请点击下方的 [推荐],谢谢

  • 相关阅读:
    9.19题解
    9.18题解
    改码风
    找到了几个好的网站
    题目链接
    二分上机训练题解
    二分例题简单说明
    贪心上机训练题解
    贪心算法例题简单说明
    Johnson法则证明
  • 原文地址:https://www.cnblogs.com/Zev_Fung/p/8080726.html
Copyright © 2020-2023  润新知