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 

 

转载于:https://www.cnblogs.com/Zev_Fung/p/8080726.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值