sqlserver 创建月表视图过程

sqlserver 创建月表视图过程,方便数据查询。

CREATE Procedure [dbo].[HY_GenView] @tablename varchar(32) -- 需调用的表名 
AS BEGIN 
  declare @Err int; 
  declare @BreakPoint  int; 
  declare @Msg varchar(255); 
  declare @strTableName char(32),@SQL varchar(8000),@SQLString varchar(8000),@ViewName varchar(32);
  declare @StartDT smalldatetime,@EndDT smalldatetime;
  select @StartDT='2014-01-01',@EndDT=getdate()
  if @EndDT<@StartDT
  begin
  select @Msg='请检查日期:开始日期大于结束日期!',@BreakPoint=359550; 
  goto ErrHandle; 
  end 
  -- 获取该视图的各列名 
  declare @i int,@id int,@max int,@str varchar(2000)
  select @id=id from sysobjects where name=@tablename and xtype='u'
  IF @id IS NULL
  BEGIN
  select @Msg='请检查数据表!',@BreakPoint=359551;
  goto ErrHandle; 
  END
  select @max=max(colorder),@i=1 from syscolumns where id=@id 
  select @str=name from syscolumns where id=@id and colorder=@i 
  while @i<@max begin 
	 select @i=@i+1 
	 select @str=@str+','+name from syscolumns where id=@id and colorder=@i 
  END
  -- 取视图名,并判断该视图是否存在,存在则删除
  select @ViewName='HY_'+@tablename+'View' 
  select @SQLString='if object_id('''+@ViewName+''',''V'') is not null drop view '+@ViewName+';'
  print(@SQLString);exec (@SQLString);
-- 获取创建视图的语句 
	select @SQL='Create View '+@ViewName+' as ' 
	select @tablename=ltrim(rtrim(@tablename)) 
	select @strTableName=@tablename+convert(varchar(6),@StartDT,112)  
	SET @SQLString=''
	WHILE convert(varchar(6),@StartDT,112)<=convert(varchar(6),@EndDT,112)
	BEGIN  
	  SELECT @strTableName=@tablename+convert(varchar(6),@StartDT,112) 
	  IF EXISTS ( SELECT * FROM dbo.sysobjects WHERE name=@strTableName AND xtype='u' )
		SELECT @SQLString=ltrim(rtrim(@SQLString))+' union all select '+@str+' from '+@strTableName
		  ELSE
		 IF year(@StartDT)=year(@EndDT) AND month(@StartDT)=month(@EndDT)
			  SELECT @SQLString=ltrim(rtrim(@SQLString))+' union all select '+@str+' from '+@tablename
	  SELECT @StartDT=dateadd(MONTH,1,@StartDT);
	END
	SET @SQLString=@SQL+substring(@SQLString,11,len(@SQLString))
-- 执行创建视图的语句 
  PRINT @SQLString;exec (@SQLString);
-- 报错处理 
  select @Err=@@Error,@Msg='取表名时出错!',@BreakPoint=359551; 
  if (@Err is null) or (@Err!=0)  goto ErrHandle; 
  return 0;
  ErrHandle: 
  raiserror('%s,断点=%d,Err=%d',16,1,@Msg,@BreakPoint,@Err); 
  return -1; 
END
GO
exec hy_GenView 'GoodsSaleStock'

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值