当前位置: 首页 > 图文教程 > 数据库 > MSSQL > sqlserver 比较两个表的列

MSSQL
在SQL Server下数据库链接的使用
SQL Server数据库中处理空值时常见问题
巧用一条SQL语句实现其它进制到十进制转换
通过JDBC连接DB2数据库技巧
深入浅出SQL教程之嵌套SELECT语句
SQL Server备份文件中导入现存数据库
SQL多表格查询合并至单一声明的常用方式
也谈如何缩小SQL SERVER日志文件
四个语句帮你提高 SQL Server 的伸缩性
用JavaBean编写SQL Server数据库连接类
sql2k中新增加的Function的sqlbook 的帮助
Mssql处理孤立用户的存储过程
探讨SQL Server中Case 的不同用法
快速清除SQLServer日志的两种方法
解决Sql Server警报的疑难问题
MySQL的数据类型和建库策略
SQL SERVER应用问题解答13例(一)
SQL SERVER应用问题解答13例(二)
多种还原.bak数据库文件方式
SQL语句中的一些特殊参数如何用变量来代替

MSSQL 中的 sqlserver 比较两个表的列


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-13   浏览: 118 ::
收藏到网摘: n/a

sqlserver 比较两个表的列的实现代码。

一、问题
给了两个各有四五十个列的表,找出他们相同的列和不同的列

二、查询两个表的列,存在临时表

--#a ,#b都是临时表,当前连接断开后自动删除
--RANK() OVER (ORDER BY syscolumns.name DESC) AS 是SQL2005支持的,在每行记录前加上自增序号
--IDENTITY(INT,1,1) 函数必须要和into联合使用

1、将表的列存入#a--'destTbl'比较的表名

select * into #a from (select RANK() OVER (ORDER BY syscolumns.name DESC) AS 序号,syscolumns.name
from syscolumns,sysobjects
where syscolumns.[id]=sysobjects.[id]
and sysobjects.[name]='destTbl') as t

select * from #a

1 姓名
2 课程
3 id
4 cno

2、将表的列存入#b--'student'比较的表名

select 序号= IDENTITY(INT,1,1),syscolumns.name
into #b from syscolumns,sysobjects
where syscolumns.[id]=sysobjects.[id]
and sysobjects.[name]='student'


select * from #b

1 id
2 name
3 cno

三、分析比较各个表列的异同

用下列语句,或者稍作改动比较
select * from #b where name in (select name from #a)
select * from #a where name not in (select name from #b)
select * from #a a, #b b where a.name=b.name
select * from #a a left join #b b on a.name=b.name