【问题标题】:SSIS - Issue in exporting date time stamp (Format: yyyy-mm-dd 00:00:00:000SSIS - 导出日期时间戳的问题(格式:yyyy-mm-dd 00:00:00:000
【发布时间】:2015-04-08 16:57:22
【问题描述】:

我有一个 SSIS 包,用于从包含日期时间戳列 (yyyy-mm-dd 00:00:00:000) 的自定义表中导出数据。创建文本文件时,它会删除最后一个“0”。我将数据类型更改为数据库时间戳 [DT_DBTIMESTAMP] IN ssis 但它不起作用。

【问题讨论】:

    标签: ssis


    【解决方案1】:

    对我来说很好,你在做什么?如果您将数据类型作为不是字符串的任何内容引入,则可以修剪所有尾随零,因为将 100.00 与 100.000000000 写入 100 的值相同。如果尾随零很重要,则必须将其转换为字符串类型以保留这些值。

    来源查询

    我有一行作为日期时间数据类型以及使用 ISO 格式的字符串发送到数据流

    SELECT
        D.Val AS ValueAsDateTime
    ,   CONVERT(char(24), D.Val, 121) AS ValueAsString
    FROM
    ( 
        VALUES 
        ( CAST('2015-03-17T23:59:59.997' AS datetime)) 
    ) D (Val);
    

    输出

    我定义了一个 CSV,它分别使用 DT_DBTIMESTAMP 和 DT_STR 作为类型。这是存储在我的文件中的内容

    ValueAsDateTime,ValueAsString
    2015-03-17 23:59:59.997000000,2015-03-17 23:59:59.997 
    

    害怕简单的包

    Biml 复制

    如果你安装了BIDS Helper,下面的Biml会生成我的复现包。

    <Biml xmlns="http://schemas.varigence.com/biml.xsd">
        <!-- Create a basic flat file source definition -->
        <FileFormats>
            <FlatFileFormat
                Name="FFF"
                CodePage="1252"
                RowDelimiter="CRLF"
                IsUnicode="false"
                FlatFileType="Delimited"
                ColumnNamesInFirstDataRow="true"
            >
                <Columns>
                    <Column
                        Name="ValueAsDateTime"
                        DataType="DateTime"
                        Delimiter=","
                        ColumnType="Delimited"
                    />
                    <Column
                        Name="ValueAsString"
                        DataType="AnsiString"
                        Delimiter="CRLF"
                        InputLength="20"
                        MaximumWidth="20"
                        Length="20"
                        CodePage="1252"
                        ColumnType="Delimited"
                        />
                </Columns>
            </FlatFileFormat>
        </FileFormats>
    
        <!-- Create a connection that uses the flat file format defined above-->
        <Connections>
            <FlatFileConnection
                Name="CM_FF"
                FileFormat="FFF"
                FilePath="C:\ssisdata\29520836.txt"
                DelayValidation="true"
            />
            <OleDbConnection
                Name="CM_OLE"
                ConnectionString="Data Source=localhost\dev2014;Initial Catalog=tempdb;Provider=SQLNCLI11.1;Integrated Security=SSPI;Auto Translate=False;"
            />
    
        </Connections>
    
        <!-- Create a package to illustrate how to apply an expression on the Connection Manager -->
        <Packages>
            <Package
                Name="so_29520836"
                ConstraintMode="Linear"
            >
    
                <!-- Create a single variable that points to the current file -->
                <Variables>
                    <Variable DataType="String" Name="QuerySource">SELECT D.Val As ValueAsDateTime, CONVERT(char(24), D.Val, 121) AS ValueAsString FROM (VALUES(CAST('2015-03-17T23:59:59.997' AS datetime)))D(Val);</Variable>
                </Variables>
    
                <!-- Add a foreach file enumerator. Use the above -->
                <Tasks>
    
                    <Dataflow Name="DFT Import file" DelayValidation="true">
                        <Transformations>
                            <OleDbSource ConnectionName="CM_OLE" Name="OLE_SRC Query">
                                <VariableInput VariableName="User.QuerySource" />
                            </OleDbSource>
                            <FlatFileDestination ConnectionName="CM_FF" Name="FF_DST"></FlatFileDestination>
                        </Transformations>
                    </Dataflow>
                </Tasks>
            </Package>
        </Packages>
    </Biml>
    

    【讨论】:

    • 这是一个简单的数据提取frpm一个源表。我在没有特殊格式的情况下“按原样”导出数据。我们收到了格式为 YYYY-MM-DD 00:00:00:000 的 CallDate,但是当创建分隔的 .txt 文件管道时,它会丢弃最后一个毫秒数,即零。
    • @Arsee 双击源和目标之间的线。在元数据选项卡中找到您的 CallDate 列,然后使用报告的数据类型从那里编辑您的问题。您还可以查看源表并报告该实体上的数据类型是什么
    • 我想通了.. CONVERT(VARCHAR,,126) 我在 OLE DB Source SQL 命令中添加了它。
    猜你喜欢
    • 2019-07-19
    • 2015-02-03
    • 1970-01-01
    • 2014-12-02
    • 1970-01-01
    • 2020-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多