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


    --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

  • 相关阅读:
    双端队列广搜
    多源bfs
    leetcode刷题-67二进制求和
    leetcode刷题-66加一
    leetcode刷题-64最小路径和
    leetcode刷题-62不同路径2
    leetcode刷题-62不同路径
    leetcode刷题-61旋转链表
    leetcode刷题-60第k个队列
    leetcode刷题-59螺旋矩阵2
  • 原文地址:https://www.cnblogs.com/xqf222/p/3306750.html
Copyright © 2020-2023  润新知