我有一种情况需要一些建议。没有代码,因为我想要查看并自己弄明白。这只是一个学术问题。
我每天都得到一个平面文件,我必须加载到表中这里是该文件的片段:
Date-YYYMMDD TIME
20091124| 01:19:00|...
20091124| 01:19:15|...
这两个字段是日期和时间。当我将这些数据加载到数据库中时,结果如下:
Date-YYYMMDD TIME
20091124 1899-12-30 01:19:00.000
20091124 1899-12-30 01:19:15.000
我有一个视图,将数据与结果合并:
datetime yearmonthday
2009-11-24 01:19:00.000 2009-11-24
2009-11-24 01:19:15.000 2009-11-24
我这样做是为了让那些需要这些数据的人不必愚弄日期和文本字段,这些字段应该是日期但不是。
问题是我不喜欢在视图中这样做。我宁愿只是正确地将它存储在原始表中。我在想,对于插入的每一行,我都会拦截该插入,然后进行合并,然后以正确的格式插入表中。完成后,我可以放弃视图。有最好的方法吗?像任何优秀的开发人员/管理员我想尽量减少干预。我们有计算机来完成这类工作。我不控制源文件,也不能对它进行任何更改。我在想一个 on insert 触发器。有没有更好的办法?虽然我在几个月内已经做了很多TSQL,但我仍然认为自己是一个初学者,我对TSQL的理解和最有效的做事方式。
答案 0 :(得分:2)
我想说加载到临时表。
CREATE TABLE dbo.StagingTable
(
Col1 DATETIME,
Col2 DATETIME
);
将数据加载到此表中。如果您的文件与问题中的文件一样简单,那么您应该可以使用BULK INSERT
并删除大部分手动过程。然后在真实表格中,有一个DATETIME
列。
INSERT dbo.RealTable(DateTimeColumn)
SELECT DATEADD(SECOND, DATEDIFF(SECOND, 0, Col2), Col1)
FROM dbo.StagingTable;
-- if successful:
TRUNCATE TABLE dbo.StagingTable;
更简单的方法是 - 如果你打开文件并修改它们 - 就是改变它:
Date-YYYMMDD TIME
20091124| 01:19:00|...
20091124| 01:19:15|...
对此:
Date-YYYMMDD |...
20091124 01:19:00|...
20091124 01:19:15|...