从Flat File重定向NULL或空值

时间:2016-04-14 18:27:18

标签: sql-server ssis ssis-2012

我将记录从平面文件源导入到SQL表中,该表有4列不接受NULL值。我想要做的是将包含特定4个字段的NULL或空值的记录重定向到平面文件目的地。

您可以在下面看到表格配置:

Table Structure

以下是我的平面文件源中的示例,其中我在第一条记录中清空了county_code,第二条记录中的UCN和第三条记录中的action_id。

enter image description here

如果我按照当前配置运行我的包,则由于约束而错误输出:

<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">

<android.support.v7.widget.Toolbar
    android:layout_width="match_parent"
    android:layout_height="?attr/actionBarSize"
    android:layout_alignParentTop="true"
    android:background="@color/color_toolbar_background"
    android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
    app:contentInsetEnd="0dp"
    app:contentInsetLeft="0dp"
    app:contentInsetRight="0dp"
    app:contentInsetStart="0dp"
    app:popupTheme="@style/ThemeOverlay.AppCompat.Light">


    <ImageView
        android:id="@+id/imageViewBack"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:padding="@dimen/dimen_16dp"
        android:src="@drawable/ic_back_black"/>

    <TextView
        android:id="@+id/textViewTitle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:layout_gravity="center"
        android:gravity="center"
        android:text="Title"
        android:textColor="@color/color_black_text"
        android:textSize="@dimen/dimen_17sp"/>

</android.support.v7.widget.Toolbar>

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <android.support.design.widget.CoordinatorLayout
            android:layout_width="match_parent"
            android:layout_height="@dimen/dimen_0dp"
            android:layout_weight="1">


            <android.support.design.widget.AppBarLayout
                android:id="@+id/appBarLayout"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:background="@color/color_white"
                android:elevation="@dimen/dimen_0dp"
                android:visibility="visible"
                app:elevation="@dimen/dimen_0dp"
                tools:visibility="visible">

                <!-- Layout that should scroll off the screen-->
                <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:background="#EE9F06"
                    android:orientation="vertical"
                    android:padding="@dimen/dimen_16dp"
                    app:layout_scrollFlags="scroll|enterAlwaysCollapsed">


                    <TextView
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:gravity="center"
                        android:text="lorem ipsum dolor set amet lorem ipsum dolor set amet."
                        android:textColor="@color/color_white"
                        android:textSize="@dimen/dimen_12sp"/>
                </LinearLayout>

                <!-- Progress bar to shown while loding previous messages -->
                <include
                    layout="@layout/layout_load_more_progress"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_below="@id/appBarLayout"
                    android:layout_gravity="center"
                    android:visibility="gone"
                    tools:visibility="visible"/>

            </android.support.design.widget.AppBarLayout>

            <android.support.v7.widget.RecyclerView
                android:id="@+id/recyclerViewChat"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:clipToPadding="false"
                android:overScrollMode="never"
                android:scrollbars="none"
                app:layout_behavior="@string/appbar_scrolling_view_behavior"/>


        </android.support.design.widget.CoordinatorLayout>

        <!-- layout for sending message should be at bottom-->
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:layout_gravity="bottom"
            android:orientation="vertical">

            <LinearLayout
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_alignParentBottom="true"
                android:background="@color/color_toolbar_background"
                android:orientation="horizontal">

                <EditText
                    android:id="@+id/editTextMessage"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center"
                    android:layout_marginBottom="@dimen/dimen_10dp"
                    android:layout_marginLeft="@dimen/dimen_16dp"
                    android:layout_marginTop="@dimen/dimen_10dp"
                    android:layout_weight="1"
                    android:background="@drawable/drawable_chat_send_message_background"
                    android:hint="@string/string_hint_send_message"
                    android:inputType="textMultiLine|textNoSuggestions"
                    android:minHeight="@dimen/dimen_32dp"
                    android:paddingLeft="@dimen/dimen_5dp"
                    android:paddingRight="@dimen/dimen_5dp"
                    android:textColorHint="@color/color_chat_send_message_border"
                    android:textSize="@dimen/dimen_17sp"/>

                <TextView
                    android:id="@+id/textViewSend"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="bottom"
                    android:clickable="true"
                    android:padding="@dimen/dimen_16dp"
                    android:text="@string/string_send"
                    android:textColor="@color/color_accent"
                    android:textSize="@dimen/dimen_17sp"/>
            </LinearLayout>
        </LinearLayout>

    </LinearLayout>

    <!--Progress bar occupying complete screen below Toolbar -->
    <include
        layout="@layout/layout_progress_bar_full_screen"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:visibility="gone"
        tools:visibility="visible"/>
</RelativeLayout></LinearLayout>

所以我的问题是如何重定向这些行?我想我应该做一个有条件的分裂,但我不确定,而且我不知道如何配置它。到目前为止,我的尝试都是徒劳的。

有什么建议吗?

3 个答案:

答案 0 :(得分:1)

在平面文件源之后添加派生列转换。在那里,您将测试不可为空的列是否为空。

为了便于调试,我会为每个相关列添加一个标记。

null_timestamp return render(request, 'login/home', {'redirect_to':next})

这样的表达式将确定平面文件中的列是否为null或者修剪长度是否为零。

一旦你测试了你的旗帜,你就会添加条件分割。条件拆分基于布尔表达式路由行。我会向它添加一个错误数据输出并使用像

这样的表达式
(ISNULL(timestamp) || LEN(RTRIM(timestamp)) == 0) ? true : false

因为它们是布尔值,如果我们将这些值组合在一起(如果其中任何一个是真的)那么整个表达式就变为真,并且行被路由到坏数据路径。

答案 1 :(得分:1)

我只需添加条件拆分并相应地命名输出:

enter image description here

答案 2 :(得分:0)

首先可以将数据加载到临时表,然后对临时表使用2个单独的查询插入到表中,还是写出到平面文件?