Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.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
Tsql 将单独的日期和时间列合并为一列_Tsql_Sql Server 2005_Triggers - Fatal编程技术网

Tsql 将单独的日期和时间列合并为一列

Tsql 将单独的日期和时间列合并为一列,tsql,sql-server-2005,triggers,Tsql,Sql Server 2005,Triggers,我有一个情况需要一些建议。没有代码,因为我想自己查一下。这只是一个学术问题 我每天都会收到一个平面文件,我必须将其加载到表中。下面是该文件的一个片段: Date-YYYMMDD TIME 20091124| 01:19:00|... 20091124| 01:19:15|... 这两个字段是日期和时间。当我将此数据加载到数据库中时,结果如下: Date-YYYMMDD TIME 20091124 1899-12-30 01:19:00.000 20091124

我有一个情况需要一些建议。没有代码,因为我想自己查一下。这只是一个学术问题

我每天都会收到一个平面文件,我必须将其加载到表中。下面是该文件的一个片段:

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
我这样做是为了让需要这些数据的人不必在日期和应该是日期但不是日期的文本字段上胡闹


问题是我不喜欢这样做。我宁愿将它正确地存储在原始表中。我在想,对于插入的每一行,我都会截取插入,进行合并,然后以正确的格式插入到表中。一旦完成,我可以放弃视图。有没有最好的办法?就像任何优秀的开发人员/管理员一样。我想尽量减少我的干预。我们有计算机来做这类工作。我不控制源文件,也不能对其进行任何更改。我在想插入一个触发器。有更好的办法吗?虽然我在几个月内对TSQL做了大量的工作,但我仍然认为自己是一个初学者,我对好的TSQL的理解和最有效的做事方法。

< P>我会把它加载到一个分步表中。

CREATE TABLE dbo.StagingTable
(
  Col1 DATETIME,
  Col2 DATETIME
);
将数据加载到此表中。如果您的文件与问题中的文件一样简单,那么您应该能够使用
批量插入
,并省去大部分手动过程。然后在实际表中,有一个
DATETIME

INSERT dbo.RealTable(DateTimeColumn)
  SELECT DATEADD(SECOND, DATEDIFF(SECOND, 0, Col2), Col1)
  FROM dbo.StagingTable;

-- if successful:
TRUNCATE TABLE dbo.StagingTable;
一个更简单的方法是——如果您正在打开文件并对其进行修改——更改以下内容:

日期YYMMDD时间
20091124|     01:19:00|...
20091124|     01:19:15|...
为此:

日期YYYYMMDD |。。。
20091124 01:19:00|...
20091124 01:19:15|...

如何将数据加载到数据库中?我继承了一个相当复杂的过程。我已经做得更好了,但这仍然是一个手动过程。1.通过电子邮件获取文件(我不是每天都加载。每隔几天加载一次更有意义)。修剪一些标题行并将所有文件合并为一个文件3。将该文件加载到access数据库中,在该数据库中进行所有数据映射4。通过sql导入器将访问表导入sql server这不是一个很长的过程。我正在等待SQLServer2012在我的环境中可用,然后我将进行迁移,并使用sis包使过程变得更好。我现在没有,跳过访问。这就是将时间值更改为18991230而不是19000101的原因。问题是获取的两个字段是不同的:时间和日期。我必须把它们合并成一个真正的数据时间。由于我的SSIS版本,我没有时间字段,只有datatime。我听说过“批量插入”,但没有研究它。此外,我正在运行SSMS 2008R2,因此在SQLServer2005中所能做的工作受到限制。我无法保存包。我只能立即运行东西,我只是打算一瘸一拐地走,直到我有了新的数据库。这应该在本月发生。不过,他们说上个月和前一个月。只是想澄清一下,2005年发布的Integration Services确实支持基于时间的数据类型,因为2005年SQL Server数据库没有实现时间数据类型。最后,修复导入包,以便在加载过程中将这些值连接到日期时间数据类型中。这是
ETL
(提取转换和加载)的
T
部分,因此,您要说的是没有触发器,并在加载期间修复它。我能做到。我有一个存储过程,可以做很多这方面的工作。这是个好主意。有时我看不见森林,看不见树木。另外,我将研究
批量插入
。我很快就会有更新。编辑:事实上,我只想说重点。我可以让这个解决方案工作,因为我已经有了大部分的结构。