ビット データ型は、クライアントによって異なる方法で解釈されます。 SSMS は 1
を返します または 0
少しの間、同じ 1/0 が SSIS のデータ フローによって True
として解釈されます。 または False
.
データ型を明示的に変更しない限り、ソースがテーブルであるかビューであるかは SSIS にとって重要ではありません。
セットアップのために、2 つのテーブルとビューを作成しました
CREATE TABLE dbo.BaseTable ( SomeBit bit NOT NULL , RowDescription varchar(50) NOT NULL ); CREATE TABLE dbo.TargetTable ( SomeBit bit NOT NULL , RowDescription varchar(50) NOT NULL , SourcePackage nvarchar(100) NOT NULL ); GO CREATE VIEW dbo.MyView AS SELECT BT.SomeBit , BT.RowDescription FROM dbo.BaseTable AS BT; GO INSERT INTO dbo.BaseTable ( SomeBit , RowDescription ) VALUES (CAST(0 AS bit), 'Falsification') , (CAST(1 AS bit), 'True dat'); GO
プレ>この時点で、SSMS を使用して dbo.BaseTable または dbo.MyView をクエリすると、1 と 0 が返されます。 C では、0 は false であり、0 以外の数値はすべて true です。 Excel はそれを FALSE および TRUE として表示します。すべてのクライアントは、ブール値のローカル表現が何であれ、値を解釈します。 SSIS は True と False を選択しました。
BaseTable または MyView からデータを取得し、テキスト ファイルとテーブルに書き込む単純なパッケージを作成しました。
基本的な制御フローはこのようになります
データ フローは複雑に見えますが、そうではありません。
テーブルまたはビューから選択し、ターゲット テーブルの説明を追加し、マルチキャストを使用して同じデータを複数の宛先に送信し、ファイルとテーブルに書き込むことができます。
ソースと宛先について SSMS を照会すると、宛先ライブラリがデータ型のローカル表現と外部表現の間の変換を処理することがわかります。
ブール値の表現には「標準」がないため、フラット ファイルに使用できるそのような変換はありません。 Y/Nが好きかも。それでも、
1/0 を強制的にフラット ファイルに書き込むために、さまざまなことを試しました。データ型を
に設定しました
- ブール値 DT_BOOL
- 1 バイトの符号付き int DT_I1
- 4 バイトの符号付き整数 DT_I4
- 文字列 DT_STR
しかし、それは問題ではありませんでした (SSIS がデータ型に関していかに厄介であるかを考えると、実際には奇妙に思えます) --- 私の出力は常に同じでした
False,Falsification True,True dat
プレ>最終的に、その出力ファイルに 0 または 1 が必要な場合は、データ型を変更する必要がありました。ソース クエリで明示的なキャストを使用するか、派生列コンポーネントを使用して三項演算子
SomeBit ? (DT_I1)1 : (DT_I1)0
.必要に応じて DT_I1/I2/I4/I8 を使用してください豆知識:データ変換コンポーネントの使用を選択した場合、False の場合は 0、True の場合は -1 を取得するか、派生コンポーネント
(DT_I1) SomeBit
で遅延キャストを使用する場合 ブール値の C 解釈に従っているようです。ビムル
私の言葉を鵜呑みにする必要はありません。無料のアドオン BIDS Helper をインストールする場合、上記の表の定義と値の母集団を使用します。 どのバージョンの SSIS でも同じコードを生成できます。
BIDS Helper をインストールした後、SSIS プロジェクトを右クリックし、コンテキスト メニューで [Biml ファイルの追加] を選択します。そのファイルの内容を以下のコードに置き換えます。保存してから右クリックして、新しいパッケージを生成します。
フラット ファイル接続の値を編集して、有効な場所を指すようにし、ole db 接続文字列がテーブルをスピンアップする場所を指すようにする必要があります。
<Biml xmlns="http://schemas.varigence.com/biml.xsd"> <Connections> <FlatFileConnection FilePath="C:\ssisdata\so_29244868.table.csv" FileFormat="FFF_table" Name="FF_Table" /> <FlatFileConnection FilePath="C:\ssisdata\so_29244868.view.csv" FileFormat="FFF_table" Name="FF_View" /> <OleDbConnection Name="CM_OLE" ConnectionString="Data Source=localhost\dev2014;Initial Catalog=tempdb;Provider=SQLNCLI11.0;Integrated Security=SSPI;" /> </Connections> <FileFormats> <FlatFileFormat Name="FFF_table" IsUnicode="false" CodePage="1252" FlatFileType="RaggedRight"> <Columns> <Column Name="SomeBit" DataType="Boolean" Delimiter="," /> <Column Name="RowDescription" DataType="AnsiString" Length="50" Delimiter="CRLF"/> </Columns> </FlatFileFormat> </FileFormats> <Packages> <Package ConstraintMode="Parallel" Name="so_29244868"> <Tasks> <Dataflow Name="DFT Table example"> <Transformations> <OleDbSource ConnectionName="CM_OLE" Name="OLE_SRC dbo_BaseTable"> <ExternalTableInput Table="dbo.BaseTable" /> </OleDbSource> <DerivedColumns Name="DER Package name"> <Columns> <Column DataType="String" Name="SourcePackage" Length="100">"DFT Table example"</Column> </Columns> </DerivedColumns> <Multicast Name="MC Dupe"> <OutputPaths> <OutputPath Name="FF" /> <OutputPath Name="Table" /> </OutputPaths> </Multicast> <FlatFileDestination ConnectionName="FF_Table" Name="FF_DST table"> <InputPath OutputPathName="MC Dupe.FF" /> </FlatFileDestination> <OleDbDestination ConnectionName="CM_OLE" Name="OLE_DST Table" TableLock="false"> <InputPath OutputPathName="MC Dupe.Table" /> <ExternalTableOutput Table="[dbo].[TargetTable]"></ExternalTableOutput> </OleDbDestination> </Transformations> </Dataflow> <Dataflow Name="DFT View example"> <Transformations> <OleDbSource ConnectionName="CM_OLE" Name="OLE_SRC dbo_MyView"> <ExternalTableInput Table="dbo.MyView" /> </OleDbSource> <DerivedColumns Name="DER Package name"> <Columns> <Column DataType="String" Name="SourcePackage" Length="100">"DFT View example"</Column> </Columns> </DerivedColumns> <Multicast Name="MC Dupe"> <OutputPaths> <OutputPath Name="FF" /> <OutputPath Name="Table" /> </OutputPaths> </Multicast> <FlatFileDestination ConnectionName="FF_View" Name="FF_DST view"> <InputPath OutputPathName="MC Dupe.FF" /> </FlatFileDestination> <OleDbDestination ConnectionName="CM_OLE" Name="OLE_DST view" TableLock="false" > <InputPath OutputPathName="MC Dupe.Table" /> <ExternalTableOutput Table="[dbo].[TargetTable]"></ExternalTableOutput> </OleDbDestination> </Transformations> </Dataflow> </Tasks> </Package> </Packages> </Biml>
プレ>