SQL Server 对比两表数据一样升序不一样的列

 

对比两表数据一样升序不一样的列

declare @tablename_mask varchar(50)
set @tablename_mask='A表'
declare @tableid int
print @tablename_mask
select @tableid=id
from sysobjects
where type in ('U' ,'S')
and name like @tablename_mask
print @tableid

--下面
declare @tablename_mask_new varchar(50)
set @tablename_mask_new='A表
declare @tableid_new int
print @tablename_mask_new
select @tableid_new=id
from sysobjects
where type in ('U' ,'S')
and name like @tablename_mask_new
print @tableid_new


select * from 
(select C.name,UPPER(D.name) ctype,
case when (D.name='nvarchar' or D.name='varchar') and C.length=-1 then 'max' when D.name='nvarchar' or D.name='varchar' then cast(C.length as varchar(50)) else '' end as clen
from syscolumns C join sys.types D on C.xtype=D.system_type_id
where C.id = @tableid
and C.type <> 37 and D.name<>'sysname'
) x join 
(
select C.name,UPPER(D.name) ctype,
case when (D.name='nvarchar' or D.name='varchar') and C.length=-1 then 'max' when D.name='nvarchar' or D.name='varchar' then cast(C.length as varchar(50)) else '' end as clen
from syscolumns C join sys.types D on C.xtype=D.system_type_id
where C.id = @tableid_new
and C.type <> 37 and D.name<>'sysname'
) y
on x.name=y.name where x.clen!=y.clen

查询表列中的字段

declare @tablename_mask varchar(50)
set @tablename_mask='表名'
declare @tableid int
print @tablename_mask
select @tableid=id
from sysobjects
where type in ('U' ,'S')
and name like @tablename_mask
print @tableid

select C.name,UPPER(D.name),
case when (D.name='nvarchar' or D.name='varchar') and C.length=-1 then 'max' when D.name='nvarchar' or D.name='varchar' then cast(C.length as varchar(50)) else '' end
from syscolumns C join sys.types D on C.xtype=D.system_type_id
where C.id = @tableid
and C.type <> 37 and D.name<>'sysname'

 

posted @ 2022-04-13 16:22  三瑞  阅读(61)  评论(0编辑  收藏  举报