SQL SERVER 2008 存储过程 --跨表查询(例)

SQL SERVER数据库项目中用到了对自动生成的表的查询。

表的命名规律如 T_His20141021 即 T_Hisyyyymmdd

由于这些表都是通过模板T_History表生成的,故自动生成的这些表的字段类型和长度都与表T_History一样。



USE [mydatabase]
GO
/****** Object:  StoredProcedure [dbo].[P_DataSearch]    Script Date: 10/21/2014 15:27:47 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:	<XXX>
-- Create date: <2014-mm-dd>
-- Description:	<查询历史数据信息>
-- =============================================

ALTER PROCEDURE [dbo].[P_GetHistoryDataTable]
	

-- Add the parameters for the stored procedure here
    @inid varchar(10),
	@start datetime,

	@end datetime
	
AS
BEGIN
	-- SET NOCOUNT ON added to prevent extra result sets from
	-- interfering with SELECT statements.
	SET NOCOUNT ON;
	declare @sql varchar(max),
		    @num int,
			@i int

	
	select  @num=datediff(DAY, @start, @end)
	--select @num

	select number, [date]=convert(char(8), dateadd(DAY, number, @start), 112) into #temp
	from
	(
		select top(datediff(DAY, @start, @end)+1) number
		from master..spt_values
		where type = 'p'
	) T 

	 set @sql='select ins.insname,his.dtime,his.dvalue from T_Intimes ins,T_History his where ins.inid=his.isid and ins.inid='''+@inid+''' '
	 
	set @i=0
	while  @i<=@num
	 BEGIN
		declare @temday varchar(20)
		  begin
			  select @temday=[date] from #temp where number=@i
			  IF EXISTS  (SELECT  * FROM dbo.SysObjects WHERE ID = object_id(N'T_His'+@temday) AND OBJECTPROPERTY(ID, 'IsTable') = 1)
				  begin
				  set @sql+=' union select ins.insname,his.dtime,his.dvalue from T_Intimes ins,T_His'+@temday+' his where ins.inid=his.isid and ins.inid='''+@inid+''' '
				  end
		  end
		  set @i=@i+1
	 END
set @sql+=' order by dtime'
 drop table #temp
-- print @sql

exec (@sql)
END


注:直接创建此存储过程时,需要将代码中的“ALTER ”改为“CREATE”

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值