2016-12-08 9 views
1

CSVをSQL Serverデータベースにインポートする際に問題が発生しました。''と ''を使用してCSVファイルをSQL Serverにインポートするにはどうすればよいですか?

Iは、CSVで, ,,,値を有するので、私は、SQLの値を比較するとき b.test = a.test(即ち'' = ' ')が偽です。挿入は完了しますが、テストにはユニークな制約があり、b.test = ''a.test = ' 'のときに制約の検証が行われます。

どうすればこの問題を解決できますか?

ここで声明(b.marke = a.markeが問題です):

INSERT INTO wt_umcodierung_bez(prnummer, marke, spk, bez, quelle) 
SELECT a.prnummer, a.marke, a.spk, a.bez, a.quelle 
FROM trans_wt_umcodierung_bez a 
WHERE NOT EXISTS (SELECT 1 
        FROM wt_umcodierung_bez b 
        WHERE b.prnummer = a.prnummer 
        AND b.marke = a.marke 
        AND b.spk = a.spk) 
AND a.spk IN (SELECT spk FROM wt_spk) 
+0

'test'列のデータ型は何ですか? '' '=' ''は実際には真ではありません' select 1ここで' '=' 'は結果 '1' –

+1

*ファイルをどのようにインポートしますか?これは、データをロードするcodで処理する必要があります。SQL Server –

+0

はvarcharです。これはwhere句の一部です。質問が更新されます。 – Sardoan

答えて

1

あなたはあなたが任意の先頭または末尾のスペースを取り除き作るために、この場合のフィールドをトリム倍増する場合があります。あなたがNULL値の問題に実行する場合は、さらにISNULLにa.markeとb.markeをラップすることができ、その後、LTRIM(RTRIM())

INSERT INTO wt_umcodierung_bez(prnummer, marke, spk, bez, quelle) 
SELECT a.prnummer, a.marke, a.spk, a.bez, a.quelle 
FROM trans_wt_umcodierung_bez a 
WHERE NOT EXISTS (SELECT 1 
        FROM wt_umcodierung_bez b 
        WHERE b.prnummer = a.prnummer 
        AND LTRIM(RTRIM(b.marke)) = LTRIM(RTRIM(a.marke)) 
        AND b.spk = a.spk) 
AND a.spk IN (SELECT spk FROM wt_spk) 
+0

このクエリのパフォーマンスは*非常に悪くなります。なぜなら、 'marke'にインデックスを使用することができないからです。列に関数を適用すると、索引付けされた値は関数の結果とは関係なく、索引を使用できなくなります。これにより、両方のテーブルの完全なテーブルスキャンが強制されます。 –

+0

いいえ、ちょうどトリムですか?ありがとう、あなたはそれを解決:) – Sardoan

関連する問題