6

しばらく調査を続けており、レンガの壁にぶつかり続けています。OpenRowsetコマンドを使用してxlsファイルから一時テーブルにインポートしています。特定の列に範囲値があるものをインポートしようとしているときに問題が発生しましたが、最も一般的なのは次のとおりです。長い数値、つまり15598として構造化された列と、文字列として構造化された一部の列、つまり15598-E。

これで、openrowsetは文字列バージョンを問題なく読み取っていますが、数値バージョンをNULLとして報告しています。openrowsetにその問題があり、作成者がクエリ文字列に「HDR = YES; IMEX = 1」を実装することについて話していることを読んだ(http://www.sqldts.com/254.aspx )が、それはまったく機能していません。

皆さん、これに遭遇したことはありますか?

さらにいくつかの情報も。JETエンジン(Microsoft.Jet.OLEDB.4.0)ではこれを実行できない可能性があるため、クエリは次のようになります。

SELECT *
FROM 
    OPENROWSET('MSDASQL'
                , 'Driver=Microsoft Excel Driver (*.xls);HDR=YES;IMEX=1;DBQ=C:\ImportFile.xls;'
            , 'SELECT * FROM [Sheet1$]')
4

5 に答える 5

6

ExcelODBCドライバーを使用していることに気付きました。同等の接続文字列を使用してJETOLEDBプロバイダーを試しましたか?

select * from openrowset(
    'Microsoft.Jet.OLEDB.4.0',
    'Data Source=C:\ImportFile.xls;Extended Properties="Excel 8.0;HDR=Yes;IMEX=1"',
    'SELECT * FROM [Sheet1$]')

編集:申し訳ありませんが、最後の段落に気づきました。確かに、Excel ODBCドライバーはまだJETエンジンを経由しているので、どのような違いがありますか?

編集: KB194124リンクを確認しました。推奨されるレジストリ値は、私のマシンのデフォルト値であり、変更したことはありません。私は上記の方法を何回か問題なく使用しました。多分それは環境問題ですか?

于 2009-08-26T12:34:50.533 に答える
3

Excelでファイルを開いてもかまわない場合は、問題のある列を取得し、列を選択して、

データ->列へのテキスト->次へ->次へ->テキスト

スプレッドシートを保存すると、すべてOPENROWSETにテキストとして入力されます。

リンクサーバーを設定して開いたExcelの代わりに.CSVファイルを使用し、schema.iniでファイルの形式を設定することで、このようなインポートを処理するためのより実用的なアプローチを見つけました。この方法では、それぞれを明示的に選択できます。列の形式。

于 2009-08-26T15:30:29.337 に答える
1

同じ問題が発生しました。残念ながら、解決策も見つかりませんでした。レジストリの修正がある可能性があることを示す詳細情報がここにあります。

于 2009-08-26T12:33:41.360 に答える
0

私も同じ問題を抱えていました。シートの最初の行の位置に文字列/数値(たとえば123ABC)の列を含む行を切り取って貼り付ける問題を修正しました。何らかの理由で、T-SQLは最初の行を読み取り、すべての値が数値であると想定します。

于 2009-10-01T15:46:30.720 に答える
0

このリンクのSqlACIDによる応答はうまくいきました[ https://wikigurus.com/Article/Show/185717/OpenRowSet-command-in-TSQL-is-returning-NULLS]:-

Excelでファイルを開いてもかまわない場合は、問題のある列を取得し、列を選択して、

データ->列へのテキスト->次へ->次へ->テキスト

スプレッドシートを保存すると、すべてOPENROWSETにテキストとして入力されます。

リンクサーバーを設定して開いたExcelの代わりに.CSVファイルを使用し、schema.iniでファイルの形式を設定することで、このようなインポートを処理するためのより実用的なアプローチを見つけました。この方法では、それぞれを明示的に選択できます。列の形式。

于 2015-11-06T06:59:21.493 に答える