【问题标题】:SQL Unique UpdateSQL 唯一更新
【发布时间】:2014-11-26 01:49:14
【问题描述】:

我有一个文件每 15 分钟更新一次销售数据。这些文件是 MTD,从早上 8 点开始,每天都会完成。它是每 15 分钟写入 SP 的纯文本 CSV。话虽如此,我想将条目添加到基于 SQL 数据的长期存储中。问题是如果我继续添加表格,我会继续得到重复。每天最多有 1500 个条目。我对 SQL 真的很陌生,所以在我掌握一些 SQL 之前,最简单的解决方案将优于潜在的性能损失。

我有 SQL 2014 和 SSIS。任何指针或帮助将不胜感激。我阅读了其他一些帖子,但我找不到任何可以帮助解决这个特定问题的帖子。

我该怎么做?

【问题讨论】:

  • 是 csv 文件将包含所有日期的所有条目,还是每天都有不同的条目?
  • 问题是,如果我继续添加表,我会继续得到重复,这可以通过仅添加新记录来解决,对吗?插入 tableA 从不存在的 tableB 中选择(tableA.id = tableB. id)

标签: sql sql-server database csv


【解决方案1】:

如果您要每天将条目附加到 CSV ,您可以随时截断表格并每天批量插入。

截断和插入比更新更快更高效。

TRUNCATE table myTable

BULK
INSERT myTable
FROM 'c:\csvtest.txt'
WITH
(
FIRSTROW = 2,  -- in case your csv file has header, other wise you can remove this.
FIELDTERMINATOR = ',',
ROWTERMINATOR = '\n'
)
GO

最好每天有一个单独的 CSV 文件,这样处理会更快,如果是单个 CSV 文件,一段时间后可能会变得太大而无法处理。

在这种情况下,我们可以对临时表进行批量插入,然后合并到实际表中。

IF (OBJECT_ID('StagingData') IS NULL)
CREATE TABLE StagingData
(  
        abc int,
        ..
)

TRUNCATE table StagingData

BULK
INSERT StagingData
FROM 'c:\csvtest.txt'
WITH
(
FIRSTROW = 2,
FIELDTERMINATOR = ',',
ROWTERMINATOR = '\n'
)
GO

现在将此 StagingData 合并到您的实际表中。

【讨论】:

    猜你喜欢
    • 2017-12-12
    • 1970-01-01
    • 1970-01-01
    • 2019-03-08
    • 2014-02-13
    • 2022-12-06
    • 2022-09-23
    • 2022-08-24
    • 1970-01-01
    相关资源
    最近更新 更多