您的位置:首页 > 数据库

SQLSERVER通过游标查询两个数据表共有字段名组合成的字符串

2012-07-01 09:29 351 查看
--SQLSERVER通过游标查询两个数据表共有字段名组合成的字符串

--应用场合: 多为类似包含当前订单数据表跟历史订单数据表,当前有效用户数据表跟历史删除用户数据表之间关联查询。很多时候当前表跟历史表的字段设计成一样的,有的则不同,不同的话在联合查询两表数据时候就会用到这个。

--定义数据表名称

Declare @TargetTableName1 nvarchar(250)--定义要查询的数据表名称变量1

Declare @TargetTableName2 nvarchar(250)--定义要查询的数据表名称变量2

Set @TargetTableName1='数据表名称1' --这里修改成您要查询的数据表名称(A+B)中的A

Set @TargetTableName2='数据表名称2' --这里修改成您要查询的数据表名称(A+B)中的B

--定义列总数

Declare @TotleColumns int

Select @TotleColumns=count(name) from syscolumns Where ID=OBJECT_ID(@TargetTableName1) and name in (Select name from syscolumns Where ID=OBJECT_ID(@TargetTableName2))

print '数据表'+@TargetTableName1+'和数据表'+@TargetTableName2+'共有相同字段总数为:'+Convert(nvarchar(20),@TotleColumns)

--定义所有字段名称字符串

Declare @ColumnsString nvarchar(4000)--最终结果字符串变量

set @ColumnsString=''

Declare @ColumnName nvarchar(255)--游标存储变量

--通过游标读取两表的共有字段

--声明游标mycursor

declare mycursor cursor for select name from syscolumns Where ID=OBJECT_ID(@TargetTableName1) and name in (Select name from syscolumns Where ID=OBJECT_ID(@TargetTableName2)) order by colid



--打开游标

open mycursor



--从游标里取出数据赋值到我们刚才声明的变量中

fetch next from mycursor into @ColumnName



--如果游标执行成功

while (@@fetch_status=0)

begin



--显示出我们每次用游标取出的值

Set @ColumnsString=@ColumnsString+','+@ColumnName

--用游标去取下一条记录

fetch next from mycursor into @ColumnName

end

--关闭游标

close mycursor

--撤销游标

deallocate mycursor

--开头包含逗号则去除

if left(@ColumnsString,1)=',' set @ColumnsString=substring(@ColumnsString,2,len(@ColumnsString)-1)

print @ColumnsString
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐