您的位置:首页 > 其它

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

2017-06-20 10:07 155 查看
/* 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 ‘没有满足条件的表创建!’
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息