sql >> データベース >  >> RDS >> Sqlserver

Openrowsetを使用したインポートエラー

    問題の原因はOledbプロバイダーです

    混合データ型の列を持つcsvファイルまたはExcelファイルをインポートすると、非主要な型がnullに置き換えられます。 。 (OledbまたはAce.Oledbの使用

    回避策

    文字列値を含む最初の行を追加し、impirtingが終了した後にそれを削除することで、いくつかの回避策を実行できます

    ID,A,B,C
    0,a,a,a
    1,12,hh,i
    2,ab12,tt,b
    3,2,aa,o
    4,bc12,ee,l
    

    また、IMEX=1を使用すると問題が修正されます

    これにより、列が文字列として読み取られ、ID列が数値として読み取られます。 (0が使用されます)

    または、HDR=NOを追加します ヘッダーがインポートされた最初の行になるように接続文字列へのプロパティ(すべての値は文字列です)

    この記事

    その他の方法

    または、aceoledbプロバイダーなしでこれを達成してみてください。次のような他の方法でcsvファイルをインポートするだけです。

    Microsoftテキストドライバの使用

    SELECT * FROM OPENROWSET('MSDASQL',
    'Driver={Microsoft Text Driver (*.txt; *.csv)};
    DefaultDir=C:\;',
    'SELECT * FROM abc.csv')
    

    BULKINSERTの使用

    CREATE TABLE dbo.MyTable 
    (ID INTEGER,
     A VARCHAR(50),
     B VARCHAR(50),
     C VARCHAR(50)
    )
    
    BULK INSERT dbo.MyTable
    FROM 'C:\abc.csv'
    WITH 
      (
        FIELDTERMINATOR = ',', 
        ROWTERMINATOR = '\n' 
      )
    

    これらの記事のその他の詳細:



    1. MySQLオペレーティング階層データ

    2. 2つのmySQLデータベース(別々の場所にある)の同期を維持するための戦略?

    3. フィールドが存在するかどうかを確認してから結果セットを返すようにクエリします

    4. 列mysqlからすべての数字を削除します