web-dev-qa-db-ja.com

ウィザードを使用してtxtをインポートするときに、ブランクをゼロではなくnullとしてインポートする方法

Import Wizardを使用してテキストファイルを読み込み、整数フィールドの空白をnullにする必要がありますが、ゼロのみが挿入されます。

それを正しくインポートする方法は?

8
Vladimir

残念ながら、ウィザードの使用を主張する場合は不可能です。VisualStudioを使用してパッケージを編集する必要があります。

Visual Studioでパッケージを編集するときに「nullを保持する」オプションがあります

この.csvファイルを考えると:

StringField,IntField
a,1
b,5
c,
d,6
e,
f,8
g,
h,
i,10
j,

そしてこのテーブル定義

CREATE TABLE [dbo].[NullTest](
    [StringField] [varchar](50) NULL,
    [IntField] [int] NULL
) ON [PRIMARY]

GO

ウィザードを使用してデータをインポートすると、ヌルは0に変換されます

ただし、ウィザードの最後に、この画面のように「すぐに実行」ではなく「パッケージを保存」を選択した場合

enter image description here

ファイルはファイルシステムのどこかに保存できます。

次に、新しいIntegration Servicesプロジェクトを作成する場合は、このような既存のパッケージを追加できます。

enter image description here

保存したファイルを参照して表示すると、1つのデータフロータスクが表示されます(既存のテーブルに追加するのではなく、テーブルの作成を選択した場合は、SQL実行タスクも表示されます)。

enter image description here

データフローをダブルクリックして編集し、データソースをダブルクリックして[nullを保持]オプションを確認します

enter image description here

次に、宛先をダブルクリックしてプロパティを表示し、「nullを保持」プロパティをtrueに変更します。

enter image description here

次に、ツールバーの緑色の矢印をクリックするか、メニューから[デバッグ]> [デバッグを開始]を選択してパッケージを実行すると、最終結果は次のようになります。

enter image description here

結局、ウィザードは単なるウィザードです。 SSISパッケージが生成され、いくつかのデフォルトが選択されますが、残念ながらデフォルトではありません。
nullを保持したい場合、Visual Studioでパッケージを編集する以外に方法はありません。

次に、Visual Studioでパッケージを自分で作成するか、@ MaxVernonのT-SQLソリューションを使用する方が簡単な場合があります。

SSMS v 17.3以降があり、新しく作成したテーブルにインポートする場合は、 フラットファイルをSQLウィザードにインポート を使用できます。

トムの答えでCSVファイルに対して実行します。

enter image description here

結果のテーブルは次のようになります

enter image description here

6
Martin Smith

Wizardを使用してデータをインポートしようとしているようです。必要な列定義でテーブルを手動で作成し、T-SQL BULK INSERTコマンドを使用することをお勧めしますデータをインポートします。

 USE tempdb;

 CREATE TABLE dbo.TestSource
 (
   SomeNumber INT NULL
 );

次の行を含むC:\temp\test.txtという名前のプレーンテキストのサンプルファイルを作成しました。

 1

 3
 4

 6
 7

 9

次のステートメントは、テキストファイルの行をTestSourceテーブルにインポートします。

 BULK INSERT dbo.TestSource
    FROM 'C:\temp\test.txt'
    WITH (
       DATAFILETYPE = 'char',
       FIELDTERMINATOR = ',',
       KEEPNULLS
    );

これは、インポートが完了した後の内容を示しています。

 SELECT *
 FROM dbo.TestSource;

enter image description here

6
Max Vernon