Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.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 SSI使用派生列引用同一表中的列_Sql Server_Excel_Ssis - Fatal编程技术网

Sql server SSI使用派生列引用同一表中的列

Sql server SSI使用派生列引用同一表中的列,sql-server,excel,ssis,Sql Server,Excel,Ssis,我正在尝试将xls电子表格导入表中,其中一列需要从同一表中的不同列派生。我希望在导入阶段执行此操作,而不是在导入之后创建一个SQL任务来执行此操作。在SSIS中创建表达式时,我很糟糕,所以这可能是一项简单的任务,但我就是做不好 DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,columndata)+1,0)) 这就是我试图使用的表达方式 您需要以下内容: DATEADD("S",-1,DATEADD("M",DATEDIFF("M", (DT_DATE) 0,DAT

我正在尝试将xls电子表格导入表中,其中一列需要从同一表中的不同列派生。我希望在导入阶段执行此操作,而不是在导入之后创建一个SQL任务来执行此操作。在SSIS中创建表达式时,我很糟糕,所以这可能是一项简单的任务,但我就是做不好

DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,columndata)+1,0))

这就是我试图使用的表达方式

您需要以下内容:

DATEADD("S",-1,DATEADD("M",DATEDIFF("M", (DT_DATE) 0,DATEADD("D",[dataDate],(DT_DATE)-2))+1,(DT_DATE)0) )
1) 您需要使用“来包围您的日期部件”

2) 您需要将0日期强制转换为显式日期类型

此表达式采用列dateserial number[dataDate]将该天数添加到日期-2

DATEADD("D",[dataDate],(DT_DATE)-2)
(显然,在我的版本(sql2008r2和excel 2007)中,sql日期0和excel日期0相差2天),并查找从日期0到该日期的月数

DATEDIFF("M", (DT_DATE) 0,DATEADD("D",[dataDate],(DT_DATE)-2))
然后将1添加到该月数,并将其添加回日期0

DATEADD("M",DATEDIFF("M", (DT_DATE) 0,DATEADD("D",[dataDate],(DT_DATE)-2))+1,(DT_DATE)0) 
(要获取列date值之后的下一个月的开始),则从日期中减去1秒,以获得datetime格式的列date值当月的最后一秒

DATEADD("S",-1,DATEADD("M",DATEDIFF("M", (DT_DATE) 0,DATEADD("D",[dataDate],(DT_DATE)-2))+1,(DT_DATE)0) )

输入是什么,预期输出是什么?您似乎正在尝试获取当前月份的最后一秒。我正在尝试从列中的日期获取当月的最后一天。当我周一开始工作时,我将进行一些调整,看看会发生什么。感谢没有起作用。错误显示Datediff不支持数据类型D参数号3I的T_R8一开始我没有注意到这是来自Excel的。源数据中数据列的格式是什么?它似乎是以浮点形式进入SSIS的。有关可能的解决方案,请参阅此处的答案和注释:刚刚解决了如何在表达式中使用sql中的dateserial编号。我仍然有问题使其正常工作。我想我只是要在导入表之后使用SQL任务来更新它。我还有其他的后期处理需要完成。