创建日期命名的表名,并转移已完成的数据

/* Object: StoredProcedure [dbo].[CreateTable] Script Date: 2017/6/20 9:58:15 */
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
– =============================================
– Author:
– Create date: <2017-6-20>
– Description: Nginx表自动创建并转移已完成的数据
– =============================================
ALTER PROCEDURE [dbo].[CreateTable]
– Add the parameters for the stored procedure here

--定义日期参数,即“N”天之前的日期
@Day int

AS

IF(SELECT COUNT(0) FROM NginxLog
–WHERE IsGrab=1 AND IsRead=’2’ AND IsRanking=’1’
)>0
BEGIN

–第一部分:以NginxLog_加“N天”之前的日期,自动创建带日期命名的表,如:NginxLog_20170614

--定义出“N天”之前的表拼接名
DECLARE @NDay VARCHAR(10)
SELECT  @NDay = CONVERT(CHAR(8),GETDATE()-@Day,112)
Declare @TableDay VARCHAR(20) = 'NginxLog_'+@NDay
SELECT @TableDay

--创建日期命名的表,将要做的SQL操作全部存储到变量
DECLARE @sql_str1 NVARCHAR(MAX)
SET @sql_str1 = N'
CREATE TABLE [dbo].['+@TableDay+'](
[Id] [nvarchar](36) NOT NULL,
[Ip] [nvarchar](15) NOT NULL,
[AccessTime] [datetime] NOT NULL,
[RemoteType] [nvarchar](20) NOT NULL,
[Uri] [nvarchar](4000) NOT NULL,
[RemoteProtocol] [nvarchar](10) NOT NULL,
[ResponseState] [int] NOT NULL,
[BandWidth] [bigint] NOT NULL,
[Os] [nvarchar](2000) NOT NULL,
[HttpReferer] [nvarchar](255) NOT NULL,
[HttpType] [nvarchar](5) NOT NULL,
[ResponseTime] [float] NULL CONSTRAINT [DF_NginxLog_ResponseTime'+@NDay+']  DEFAULT ((0)),
[AccessMachine] [nvarchar](15) NOT NULL CONSTRAINT [DF_NginxLog_AccessMachine'+@NDay+']  DEFAULT (NULL),
[IpProvince] [nvarchar](50) NULL,
[IpCity] [nvarchar](50) NULL,
[IsRead] [tinyint] NOT NULL CONSTRAINT [DF__NginxLog__isRead__2B3F6F97'+@NDay+']  DEFAULT ((0)),
[IsGrab] [tinyint] NOT NULL CONSTRAINT [DF_NginxLog_IsGrab'+@NDay+']  DEFAULT ((0)),
[UpstreamTime] [float] NULL CONSTRAINT [DF_NginxLog_UpstreamTime'+@NDay+']  DEFAULT ((0)),
[IsRanking] [tinyint] NOT NULL CONSTRAINT [DF__NginxLog__IsRank__5B78929E'+@NDay+']  DEFAULT ((0)),
CONSTRAINT [PK__tmp_ms_x__3214EC0724D4C13B'+@NDay+'] PRIMARY KEY CLUSTERED 
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]'

--执行变量
EXEC (@sql_str1)

–第二部分:当数据库的日期=N天前定义的日期,则将数据导入到“NginxLog_日期”的表中

--定义判断条件的日期
DECLARE @jDay CHAR(10)='0000-00-'+CAST(@Day AS CHAR(10))
SELECT @jDay

DECLARE @sql_str2 NVARCHAR(MAX)
SET @sql_str2 = N'
INSERT INTO [dbo].['+@TableDay+'](
   [Id]
  ,[Ip]
  ,[AccessTime]
  ,[RemoteType]
  ,[Uri]
  ,[RemoteProtocol]
  ,[ResponseState]
  ,[BandWidth]
  ,[Os]
  ,[HttpReferer]
  ,[HttpType]
  ,[ResponseTime]
  ,[AccessMachine]
  ,[IpProvince]
  ,[IpCity]
  ,[IsRead]
  ,[IsGrab]
  ,[UpstreamTime]
  ,[IsRanking]
  )
 SELECT 
  [Id]
  ,[Ip]
  ,[AccessTime]
  ,[RemoteType]
  ,[Uri]
  ,[RemoteProtocol]
  ,[ResponseState]
  ,[BandWidth]
  ,[Os]
  ,[HttpReferer]
  ,[HttpType]
  ,[ResponseTime]
  ,[AccessMachine]
  ,[IpProvince]
  ,[IpCity]
  ,[IsRead]
  ,[IsGrab]
  ,[UpstreamTime]
  ,[IsRanking]
  FROM dbo.NginxLog WHERE CONVERT(char(10),AccessTime,120)=CONVERT(char(10),getdate()-'+@jDay+',120)'

  --执行SQL
  EXEC (@sql_str2)  

–第三部分:删除NginxLog表中,这一天的数据
SELECT * FROM dbo.NginxLog WHERE CONVERT(char(10),AccessTime,120)=CONVERT(char(10),getdate()-@Day,120)
–DELETE FROM dbo.NginxLog WHERE CONVERT(char(10),AccessTime,120)=CONVERT(char(10),getdate()-@Day,120)
END

ELSE
PRINT ‘没有满足条件的表创建!’

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值