存储过程,请高手指点,问题解决马上给分

gyfs 2002-01-08 01:07:16
数据库里每天建一个表,表结构完全一样,表名为:tablemmdd(mm表示当前月,dd表示今天日期),我想写一个存储过程,查出最近三个表的所有记录,表名不能用变量表示,我就无可奈何了,请高手指点,我该怎么实现?(SQL SERVER 数据库)
...全文
96 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
gyfs 2002-01-09
  • 打赏
  • 举报
回复
net_steven(吃素的狼)另外的一个帖子还有20分,请你去拿 
蓝天 2002-01-08
  • 打赏
  • 举报
回复
可是用动态SQL需要的是字符串
当然用convert( varchar(2),month(getdate()))之类的方法也行, 不过上边的方法更简洁
gyfs 2002-01-08
  • 打赏
  • 举报
回复
我记得取日期有一个很简单的函数的,用不着right or left 吧,好像是datepart还是什么来着,一下给忘了,也没法查帮助。
gyfs 2002-01-08
  • 打赏
  • 举报
回复
谢谢各位,我晚上回去试(呵呵..此处没有sql server),解决后,明天将分分给各位。
net_steven 2002-01-08
  • 打赏
  • 举报
回复
意外,再来:
---------------------------------------
declare @sql varchar(1000)
select @sql='select * from table'+right(convert(char(8),getdate()-2,112),4)
+'union select * from table'+right(convert(char(8),getdate()-1,112),4)+'union select * from table'+right(convert(char(8),getdate(),112),4)
exec (@sql)
-------------------------------------
这回爽了。

net_steven 2002-01-08
  • 打赏
  • 举报
回复
declare @tablename varchar(9),@sql varchar(1000)
select @tablename='table'+left(convert(varchar,getdate(),101),2)+
substring(convert(varchar,getdate(),101),4,2)
declare @strsql varchar(1000)
select @strsql=''
select @strsql='select * from table'+right(convert(char(8),getdate()-2,112),4)
+'union select * from table'+right(convert(char(8),getdate()-1,112),4)+'union select * from table'+right(convert(char(8),getdate(),112),4)

exec (@strsql)
convert(char(8),getdate(),112)

PowerFM 2002-01-08
  • 打赏
  • 举报
回复
少了一個條件:

Declare @tablename varchar(30)
Declare @tabletmp varchar(10)
set @tablename=''

select top 3 @tablename=@tablename+name +',' from sysobjects where xtype='U' and name like 'table%' and datediff(day,crdate,getdate())<=3 order by crdate


while @tablename<>''
begin
set @tabletmp=left (@tablename,charindex(',',@tablename)-1)
set @tablename=right(@tablename,len(@tablename)-len(@tabletmp)-1)
Exec ('Select * From ' +@tabletmp)
end
PowerFM 2002-01-08
  • 打赏
  • 举报
回复
Declare @tablename varchar(30)
Declare @tabletmp varchar(10)
set @tablename=''

select top 3 @tablename=@tablename+name +',' from sysobjects where xtype='U' and datediff(day,crdate,getdate())<=3 order by crdate


while @tablename<>''
begin
set @tabletmp=left (@tablename,charindex(',',@tablename)-1)
set @tablename=right(@tablename,len(@tablename)-len(@tabletmp)-1)
Exec ('Select * From ' +@tabletmp)
end
icevi 2002-01-08
  • 打赏
  • 举报
回复
declare @tablename varchar(9)
select @tablename='table'+left(convert(varchar,getdate(),101),2)+
substring(convert(varchar,getdate(),101),4,2)
declare @strsql varchar(1000)
select @strsql=''
select @strsql='select * from '+@tablename
exec (@strsql)

这只是当天的,最近三天的类似。

myclife 2002-01-08
  • 打赏
  • 举报
回复
在下原闻其详。
flowerofwind 2002-01-08
  • 打赏
  • 举报
回复
似乎不困难,就是通过当前日期把表名拚出来,用动态sql就可以了

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧