今天下午在生成奖品奖券的时候,发现由于线上奖池表的数据过多(大概已经有100多万条了),造成再生成奖券的时候,就会因为已经存在数据过多,生成数据的时候出现请求数据超时现象。于是我想怎么才能分担表的负担呢?
于是就想如果每隔一段时间,生成一个表,这样不管是查询还是导入数据,都会非常快,不影响数据库的效率。
由于是定时触发的,我第一个想到的是SQL Server中的触发器或作业。但仔细想了下,这个主要是按照时间发生的改变,还是作业比较适合。
于是现在问题,就变成,如何才能创建动态表名称呢?
网上搜了下微软的文档:
http://support.microsoft.com/kb/175850/zh-cn,SQL Server有直接执行动态sql语句的方法
于是就有了下面的完整想法。
1、我先写一个动态的创建表的sql语句。代码:
declare @tablename nvarchar(50)
set @tablename='Dept'
set @tablename=@tablename+cast(datepart(year,GETDATE()) as nvarchar(50))+cast(DATEPART(MONTH,GETDATE()) as nvarchar(50))
select @tablename
execute ('CREATE TABLE '+@tablename+'(
[Id] [nvarchar](32) NOT NULL,
[Name] [nvarchar](32) NULL,
[Description] [nvarchar](200) NULL,
[CreatedDate] [datetime] NULL,
[LastModified] [datetime] NULL
) ON [PRIMARY]
')
2、创建一个作业,把要执行的动态脚本复制进去,创建一个每个月触发一次的作业。
3、启动作业,查看作业是否执行。
这样,一个SQL Server自动创建动态表的逻辑就诞生了。希望对大家有帮助。