Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/5.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
SSIS SQL Server 2008 R2-在传递到存储过程后将datetime存储到表中_Datetime_Ssis_Sql Server 2008 R2 - Fatal编程技术网

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的有效映射。