SSIS SQL Server 2008 R2-在传递到存储过程后将datetime存储到表中
我有一个名为SSIS SQL Server 2008 R2-在传递到存储过程后将datetime存储到表中,datetime,ssis,sql-server-2008-r2,Datetime,Ssis,Sql Server 2008 R2,我有一个名为StartDateTime的变量,数据类型DateTime,表达式@[System::StartTime]。在执行TSQL任务中,我使用类型为DateTime的输入参数调用存储过程,并将变量@[User::StartDateTime]映射到参数数据类型DBTIMESTAMP 我得到了错误 无效的时间格式 不明白为什么 ALTER PROCEDURE [dbo].[spSSISInsControl] @SourceTableName VARCHAR(100), @Pac
StartDateTime
的变量,数据类型DateTime
,表达式@[System::StartTime]
。在执行TSQL任务中,我使用类型为DateTime
的输入参数调用存储过程,并将变量@[User::StartDateTime]
映射到参数数据类型DBTIMESTAMP
我得到了错误
无效的时间格式
不明白为什么
ALTER PROCEDURE [dbo].[spSSISInsControl]
@SourceTableName VARCHAR(100),
@PackageName VARCHAR(100),
@DateProcessed DATETIME,
@RowsTotal INT,
@RowsLoaded INT,
@RowsNoMatch INT,
@RowsDeleted INT = 0,
@SourceFileName VARCHAR(100) = NULL
数据类型datetime与时间戳不同。我想这是你的问题。这里有一个指向更多信息的链接:在您的问题中,您特别提到了DBTIMESTAMP的数据类型,这不是您想要的。而是指定日期。我知道,听起来这只是日期部分,但这是地狱般的SSIS的三种不同类型的系统 安装程序 我创建了以下存储过程,将您的问题减少到最少的移动部件
CREATE PROCEDURE
dbo.so_36208937
(
@StartDateTime datetime = '2013-01-01'
)
AS
BEGIN
SELECT @StartDateTime AS StartDateTime;
END
GO
我的套餐很基本
我有如下配置的执行sql任务
由于同一个进程运行了两次,因此我将其放入一个名为queryprocoledbc的变量中,该变量的值为executedbo.so_36208937
当您使用OLE DB连接管理器时,我们使用?
指定参数的位置
我运行了两次执行SQL任务,一次使用静态日期值,一次使用基于@[System::StartTime]的日期值,这两种方法都可以正常工作
Biml
商业智能标记语言Biml是一种使用XML描述SSIS包的方法。免费插件将biml转换为SSIS包
修复第三行,使连接字符串指向有效位置
本biml描述了一个SSIS包,它有两个变量:StartDateTime和StaticStartDateTime。两者都是数据类型DateTime。前者的表达式设置为StartTime,后者是静态的
<Biml xmlns="http://schemas.varigence.com/biml.xsd">
<Connections>
<OleDbConnection Name="CM_OLE" ConnectionString="Data Source=localhost\dev2014;Initial Catalog=tempdb;Provider=SQLNCLI11.0;Integrated Security=SSPI;"/>
</Connections>
<Packages>
<Package Name="so_36208937" ConstraintMode="Linear">
<Variables>
<Variable DataType="DateTime" Name="StartDateTime" EvaluateAsExpression="true">@[System::StartTime]</Variable>
<Variable DataType="DateTime" Name="StaticStartDateTime">2016-03-24 13:14:15.678</Variable>
<Variable DataType="String" Name="QueryProcOleOdbc">EXECUTE dbo.so_36208937 ?;</Variable>
<Variable DataType="DateTime" Name="result">2015-01-01<![CDATA[]]></Variable>
</Variables>
<Tasks>
<ExecuteSQL
ConnectionName="CM_OLE"
Name="SQL Use static variable">
<VariableInput VariableName="User.QueryProcOleOdbc" />
<Parameters>
<Parameter DataType="DateTime" VariableName="User.StaticStartDateTime" Name="0" />
</Parameters>
</ExecuteSQL>
<ExecuteSQL
ConnectionName="CM_OLE"
Name="SQL Use dynamic value">
<VariableInput VariableName="User.QueryProcOleOdbc" />
<Parameters>
<Parameter DataType="DateTime" VariableName="User.StartDateTime" Name="0" />
</Parameters>
</ExecuteSQL>
</Tasks>
</Package>
</Packages>
</Biml>
@[系统::开始时间]
2016-03-24 13:14:15.678
执行dbo.so_36208937?;
2015-01-01
SSIS DBTIMESTAMP类型转换为SQL Server DATETIME和SMALLDATETIME。我没有使用SQL时间戳。您使用的是什么连接管理器?ADO、OLE DB或ODBC?存储过程服务器是否与SSIS服务器具有相同的本地设置?请发布存储过程代码.OLE DB,所有设置都相同-我正在尝试通过SSIS调试在本地运行。它没有达到调用SP的程度。如果我知道如何发布屏幕截图,我会提供更多信息。我应该在SQL Saturday参加biml课程。。。SSIS日期类型是解决我的问题的关键。SSIS的数据类型太多,SQL到SSIS的转换表从未提到SSIS DATE是到SQL DATETIME的有效映射。