Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 存档存储过程_Sql Server_Stored Procedures - Fatal编程技术网

Sql server 存档存储过程

Sql server 存档存储过程,sql-server,stored-procedures,Sql Server,Stored Procedures,大家早上好,我正在尝试找出如何将某些行从一个表移动到另一个表。这是踢球者;此活动表中的每一行都有一个日期格式,即字母D和yyyymmdd。例如,今天的日期格式为D20161020。我试图做的是将上个月的所有行(例如D201609)移到存档表副本中,然后删除复制的行 我的计划和想法是保持当前数据尽可能快。是的,我正在使用索引,我只是不希望表变得那么大每天,我将3000多条记录导入该表。对于苗条,我通过记录ID引用主记录表。基本上,该表有一个主记录表RecID的RecID外键,日期的格式为Dyyyy

大家早上好,我正在尝试找出如何将某些行从一个表移动到另一个表。这是踢球者;此活动表中的每一行都有一个日期格式,即字母D和yyyymmdd。例如,今天的日期格式为D20161020。我试图做的是将上个月的所有行(例如D201609)移到存档表副本中,然后删除复制的行

我的计划和想法是保持当前数据尽可能快。是的,我正在使用索引,我只是不希望表变得那么大每天,我将3000多条记录导入该表。对于苗条,我通过记录ID引用主记录表。基本上,该表有一个主记录表RecID的RecID外键,日期的格式为Dyyyymmdd。我将该日期的计数放入相应的记录中

还有一件事,我希望只在活动表中保留当月的数据

我计划按年份保存归档表,即2016counts、2017counts,它们将保存当年的数据


我认为对于年度归档表,我可以简单地创建一个过程,将当前归档表中的所有数据复制到年度归档,然后截断该活动表。或者重命名该表,只需重新创建一个与之类似的空白表,因为活动存档表中除了第一列之外没有任何内容,第一列是主记录表中的一个相关记录ID。

以下是一个示例,其中包含了您需要执行的大部分操作。希望这些评论能够不言自明地说明每一步都在做什么。下面的代码是可重新运行的,因此您可以查看它生成的输出,并对其进行调整以测试不同的变体

CREATE TABLE #Main ( DateVal NVARCHAR(15) -- should be a date really!!!
                     )

CREATE TABLE #Archive ( DateVal NVARCHAR(15) -- should be a date really!!!
                        )

INSERT  INTO #Main
        ( DateVal
        )
        SELECT  'D20161001'
        UNION ALL
        SELECT  'D20161002'
        UNION ALL
        SELECT  'D20161003'
        UNION ALL
        SELECT  'D20161004'
        UNION ALL
        SELECT  'D20160913'
        UNION ALL
        SELECT  'D20160911'
        UNION ALL
        SELECT  'D20161007'
        UNION ALL
        SELECT  'D20160901'

-- values as they are
SELECT  DateVal
FROM    #Main

-- values with dates formatted from values and month extracted
SELECT  DateVal ,
        RIGHT(DateVal, 8) AS DateSection ,
        CAST(RIGHT(DateVal, 8) AS DATE) ConvertedToDate ,
        DATEPART(MONTH, ( CAST(RIGHT(DateVal, 8) AS DATE) )) MonthPart
FROM    #Main

-- values not in current month - to archive
SELECT  DateVal ,
        RIGHT(DateVal, 8) AS DateSection ,
        CAST(RIGHT(DateVal, 8) AS DATE) ConvertedToDate ,
        DATEPART(MONTH, ( CAST(RIGHT(DateVal, 8) AS DATE) )) MonthPart
FROM    #Main
WHERE   DATEPART(MONTH, ( CAST(RIGHT(DateVal, 8) AS DATE) )) < DATEPART(MONTH,
                                                              GETDATE())

-- insert the archived records
INSERT  INTO #Archive
        ( DateVal
        )
        SELECT  DateVal
        FROM    #Main
        WHERE   DATEPART(MONTH, ( CAST(RIGHT(DateVal, 8) AS DATE) )) < DATEPART(MONTH,
                                                              GETDATE())

-- delete the archived records
DELETE  #Main
WHERE   DATEPART(MONTH, ( CAST(RIGHT(DateVal, 8) AS DATE) )) < DATEPART(MONTH,
                                                              GETDATE())

-- see what's archived
SELECT  *
FROM    #Archive

-- see what's active
SELECT  *
FROM    #Main

DROP TABLE #Main
DROP TABLE #Archive

请用一些示例数据解释并显示最终输出您真的打算移动列吗?你的意思是你想移动行吗?@TT。我做出了这样的假设,希望这是正确的假设。我会在今天的一小段时间内试一试,它看起来与我正在尝试做的相似,可能需要一些调整来动态地拉入上个月/年的日期。我会再打给你的。谢谢:我最终使用了一个内置在存储过程中的动态查询。我现在需要做的是使用动态SQL删除上个月的记录,但我必须通过计算来确定月份和年份。我喜欢你使用临时表。要查看程序,请转到该链接“不适用于我”,如果您有后续问题,请询问另一个问题或编辑此问题,只要问题没有太大变化,因此我的答案没有意义。