小编Ant*_*nio的帖子

将大表复制到存档表 SQL Server 2012

我有一个包含我的应用程序日志的表,它有 161.626.718 行(并且还在增长),并且在其上进行插入非常慢。我的想法是只保留表中 6 个月的日志和所有我想复制到应用程序无法访问的存档表上的旧记录,如果有人需要一些信息,只需直接在表上进行选择。因此,我们的想法是创建这样的日常工作:

SELECT * INTO audlog_backup FROM audlog WHERE XDATE <= DATEADD(day,-185,GETDATE())

DELETE FROM audlog WHERE XDATE <= DATEADD(day,-185,GETDATE())
Run Code Online (Sandbox Code Playgroud)

但是由于表的大小,这将花费很长时间,并且在第一次运行时会减慢甚至锁定数据库一段时间,毕竟大多数行将超过 6 个月。

第一次尽可能安全和快速地做这件事的建议是什么?

更多信息:

SQL Server 2012 标准版

创建表的脚本:

CREATE TABLE [dbo].[audlog_backup](
    [PVKEY] [float] NULL,
    [DKEY] [varchar](14) NULL,
    [XDATE] [datetime] NULL,
    [XTIME] [varchar](8) NULL,
    [XFROM] [varchar](50) NULL,
    [XTO] [varchar](50) NULL,
    [DETAILS] [text] NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
SET ANSI_PADDING ON
ALTER TABLE [dbo].[audlog_backup] ADD [XUSER] [varchar](50) NULL
ALTER TABLE [dbo].[audlog_backup] ADD [PEOPLEKEY] [int] NULL
ALTER TABLE …
Run Code Online (Sandbox Code Playgroud)

sql-server sql-server-2012

7
推荐指数
1
解决办法
1万
查看次数

查询谁支付了超过 10k

我有一张包含付款信息的表格,如下所示:

ID COSTUMER_ID DATEPAID     AMOUNT
1    1        2012-01-01      50
2    1        2012-02-01      100
3    1        2012-03-01      70
4    2        2012-03-01     6000
4    2        2012-09-01     3000
4    2        2014-04-01     8000
5    3        2013-03-01     9000
6    3        2013-08-01     3000
Run Code Online (Sandbox Code Playgroud)

等等。我需要知道哪些客户在 12 个月内支付了超过 10,000 美元。(在示例中,只有客户 3 适合)。不要介意什么时候,唯一的标准是在任何连续 12 个月的组合中 SUM(AMOUNT) > 10000。

但我坚持下去。有任何想法吗?我正在使用 SQL Server 2012。

sql-server select sql-server-2012

2
推荐指数
1
解决办法
312
查看次数

使用带有 2 个表的 CASE 更新

我有2个表,我想更新table2与的标准table1table2。标准是:

1.table1.amount > 10000

2.table2.flag为空或table2.flag = '0'

因此,如果 2 个条件为真,则更新table2.flag = '1'table2.flagdate = getdate()

table2.flag是一个检查每个支付超过10,000的人的标志。但是如果已经标记了,我不想再次标记,因为我不能丢失原始的table2.flagdate. 但是我尝试了很多东西,没有任何效果是我想要的。有任何想法吗?

sql-server sql-server-2012

1
推荐指数
1
解决办法
1522
查看次数

标签 统计

sql-server ×3

sql-server-2012 ×3

select ×1