Import Wizardを使用してテキストファイルを読み込み、整数フィールドの空白をnullにする必要がありますが、ゼロのみが挿入されます。
それを正しくインポートする方法は?
残念ながら、ウィザードの使用を主張する場合は不可能です。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に変換されます
ただし、ウィザードの最後に、この画面のように「すぐに実行」ではなく「パッケージを保存」を選択した場合
ファイルはファイルシステムのどこかに保存できます。
次に、新しいIntegration Servicesプロジェクトを作成する場合は、このような既存のパッケージを追加できます。
保存したファイルを参照して表示すると、1つのデータフロータスクが表示されます(既存のテーブルに追加するのではなく、テーブルの作成を選択した場合は、SQL実行タスクも表示されます)。
データフローをダブルクリックして編集し、データソースをダブルクリックして[nullを保持]オプションを確認します
次に、宛先をダブルクリックしてプロパティを表示し、「nullを保持」プロパティをtrueに変更します。
次に、ツールバーの緑色の矢印をクリックするか、メニューから[デバッグ]> [デバッグを開始]を選択してパッケージを実行すると、最終結果は次のようになります。
結局、ウィザードは単なるウィザードです。 SSISパッケージが生成され、いくつかのデフォルトが選択されますが、残念ながらデフォルトではありません。
nullを保持したい場合、Visual Studioでパッケージを編集する以外に方法はありません。
次に、Visual Studioでパッケージを自分で作成するか、@ MaxVernonのT-SQLソリューションを使用する方が簡単な場合があります。
SSMS v 17.3以降があり、新しく作成したテーブルにインポートする場合は、 フラットファイルをSQLウィザードにインポート を使用できます。
トムの答えでCSVファイルに対して実行します。
結果のテーブルは次のようになります
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;