--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
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|