多张表,把表名当参数查询所有表的数据

多张类似的表,有共同列,求去多表的汇总查询到DataTable中 ,此方法使用游标查询表的集合,利用游标循环将Tablename值付给要查询的SQL查询出数据。

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
ALTER PROCEDURE [dbo].[proc_getalltable]
(
@Deptid varchar(20),
@uid int,
@start datetime,
@end datetime
)
AS
Create table #gettemp
(
id int,
uid int,
col float,
ScoreStatus int,
fillingtime datetime
)
BEGIN
 SET NOCOUNT ON;

    DECLARE @TypeScoreId int,@tablename VARCHAR(100),@Sql varchar(2000)           

    declare tablename cursor for  select ScoreId,DataBaseDBO  from info_TypeScore
                                  where substring(ScoreNum,0,3)=@Deptid and ScoreStatus=1

    open tablename
    fetch next from tablename into @TypeScoreId,@tablename
 

    while @@FETCH_STATUS = 0
    begin
       set @Sql =N'select id,uid,col,ScoreStatus,fillingtime from ' + @tablename
             +' where TypeScoreId='+cast(@TypeScoreId as nvarchar(20))
             +' and uid='+cast(@uid as nvarchar(20))
    +' and fillingtime between convert(datetime,'''+cast(@start as nvarchar(20))+''')'
             +' and convert(datetime,'''+cast(@end as nvarchar(20))+''')'
        insert into #gettemp  
        exec(@Sql)
        fetch next from tablename into @TypeScoreId,@tablename
    end               

    close tablename
    deallocate tablename
 select * from #gettemp
end

此方法我已经应用过,如果有问题可以给我留言。。。。。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

紫声潇潇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值