0

私はこのSQLコードを持っています。Excel ファイルの特定のセルを更新します。

SET @cmd = 'UPDATE OPENROWSET(''Microsoft.ACE.OLEDB.12.0'',''Excel 12.0;Database=C:/sompath/file.xls;HDR=NO;IMEX=0;'',''SELECT F1,F2,F3,F4,F5,F6,F7,F8,F9 FROM [Sheet1$]'')
            set [F1] = ''Hello World''
            where [F1] = ''<field1>'''
EXEC(@cmd)

このコードは 32 ビットでは正常に実行されますが、64 ビット サーバー (MSSQL Server 2012) では失敗します。64 ビットで次のエラーが発生します。

OLE DB provider "Microsoft.ACE.OLEDB.12.0" for linked server "(null)" returned message "No value given for one or more required parameters.".
Msg 7320, Level 16, State 2, Line 1
Cannot execute the query "SELECT F1,F2,F3,F4,F5,F6,F7,F8,F9 FROM [Sheet1$]" against OLE DB provider "Microsoft.ACE.OLEDB.12.0" for linked server "(null)".

32ビットPCで作成したfile.xlsエクセルファイルです。

誰かがこの問題で私を助けてくれますか? 私はネットを検索してきましたが、実際には解決策やそれを解決するためのガイドさえも得られませんでした。この質問が既に投稿され、回答されている場合は、正確なリンクを投稿してください。

ちなみに、ACE プロバイダーと必要な設定はすべてインストール済みです。実際、このコードは正常に機能しますが、UPDATE ステートメントでは機能しません。

DECLARE @cmd VARCHAR(1000)
set @cmd = 'SELECT * FROM
            OPENROWSET(''Microsoft.Ace.OLEDB.12.0'',
            ''Excel 12.0;Database=C:/sompath/file.xls;HDR=NO;IMEX=0'',[Sheet1$])'

EXEC(@cmd)

ありがとう!

4

1 に答える 1