sql语句查两个表的列是否一致

一、首先要了解Sqlserver 中系统表对象及表结构查询的函数:sysobjects、syscolumns以及函数object_id

     

 1. sysobjects ——  系统对象表。 保存当前数据库的对象,如约束、默认值、日志、规则、存储过程等

注:重要字段需要解释的是 xtype,他的数据字段内容分别表示为:

C = CHECK 约束

D = 默认值或 DEFAULT 约束

F = FOREIGN KEY 约束

FN = 标量函数

IF = 内嵌表函数

K = PRIMARY KEY 或 UNIQUE 约束

L = 日志

P = 存储过程

R = 规则

RF = 复制筛选存储过程

S = 系统表

TF = 表函数

TR = 触发器

U = 用户表

V = 视图

X = 扩展存储过程

 

2. sysolumns —— 当前数据库的所有表里面创建的字段都保留在里面

注:SQL中的sysobjects 的id与syscolumns 的id 存在主键关系,即 syscolumns 中的id字段是 sysobjects 表的主键对应值(查询时: select name from syscolumns where id=(select id from sysobjects where name='表名')

 

3. object_id('表名') —— 函数表示直接取表对象的ID值。此方法返回数据库对象标识号

注:查询时:  select name from syscolumns where  id =object_id('TB')  等同于上述查询

 

二、比较同一数据库中两个表的对应字段的差异(当两个表结构一样时,查询表对应的字段是否一致)

select * from (
select name
from syscolumns
where id=(
select id from sysobjects
where name='表名1')
) T1
FULL OUTER JOIN(
select name from syscolumns
where id=(
select id from sysobjects
where name='表名2')
) T2 on T1.name=T2.name
where T1.name is null or T2.name is null

 

三、比较在不同数据库中两个表的对应字段的差异(当两个表结构一样时,查询表对应的字段是否一致)

select * from (
select name
from gxjmxy.dbo.syscolumns
where id=(
select id from gxjmxy.dbo.sysobjects
where name='TB1')
) T1 FULL OUTER JOIN(
select name from Test.dbo.syscolumns
where id=(
select id from Test.dbo.sysobjects
where name='TB'
)
) T2 on T1.name=T2.name
where T1.name is null or T2.name is null

 

 

posted @ 2021-02-25 15:27  小柒仔  阅读(2649)  评论(0编辑  收藏  举报