7

サードパーティに転送するためにデータをいくつかの Excel ファイルにエクスポートする SSIS パッケージがあります。これを 64 ビット サーバーでスケジュールされたジョブとして実行するには、ステップを CmdExec タイプとして設定し、32 ビット バージョンの DTExec を呼び出す必要があることを理解しています。しかし、Excel ファイルの接続文字列を渡すコマンドを正しく取得できないようです。

これまでのところ、私はこれを持っています:

DTExec.exe /SQL \PackageName /SERVER OUR2005SQLSERVER /CONNECTION 
LETTER_Excel_File;\""Provider=Microsoft.Jet.OLEDB.4.0";"Data 
Source=""C:\Temp\BaseFiles\LETTER.xls";"Extended Properties=
""Excel 8.0;HDR=Yes"" /MAXCONCURRENT " -1 " /CHECKPOINTING OFF /REPORTING E

これは私にエラーを与えます:Option "Properties=Excel 8.0;HDR=Yes" is not valid.

引用符でいくつかのバリエーションを試しましたが、まだうまくいきません。

これを修正する方法を知っている人はいますか?

UPDATE:

ご協力ありがとうございます。64 ビット バージョンでのみ動作するように見えるため、今のところ CSV ファイルを使用することにしました。

4

5 に答える 5

8
于 2011-07-24T07:31:49.353 に答える
4

64ビット環境でExcel接続を利用できます。パッケージ構成プロパティに移動します。

デバッグ -> デバッグ オプション -> Run64BtRuntime -> False に変更 さらに、SQL エージェントを使用する場合は、ジョブ ステップのプロパティに移動し、32 ビット ランタイムを確認します。

注: これは、Visual Studio 内でのデバッグにのみ適用されます...

于 2008-12-18T18:41:39.687 に答える
2

64 ビットの Jet OLEDB プロバイダーがないため、64 ビット SSIS から Excel ファイルにアクセスすることはできません。

ただし、64 ビット サーバーでも 32 ビット SSIS を使用できます。これは、64 ビット バージョンをインストールしたときに既にインストールされており、32 ビット DTEXEC.EXE (インストールされているもの) を実行するだけで済みます ( SSIS 2008 を使用している場合は、90100Program Files (x86)\Microsoft Sql Server\90\Dts\Binnに置き換えてください)。

于 2008-09-21T09:20:49.107 に答える
2

ビジネス要件でない限り、接続文字列をコマンド ラインからパッケージに移動し、パッケージ構成を使用して Excel ファイルへのパスを定義することをお勧めします (ハードコーディングしないようにするため)。これにより、メンテナンスが容易になります。

  1. 変数@ExcelPathを定義します。
  2. 接続のExpressionプロパティを使用して接続文字列を作成します - 例:"Data Source=" + @[User::FilePath] + ";Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties=dBASE IV;"
  3. パッケージ構成で@ExcelPathに値を割り当てます。

上記の接続文字列を詳しく見てください。作業パッケージから取得されます。これについてはよくわかりませんが、引用符はまったく必要ないかもしれません (上記のものは式エディターが必要とするため、そこにあるだけです)。


また、64 ビット SQL Server 2005 の SSIS でいくつか問題が発生しました。私のブログからの投稿はあなたの質問に答えていませんが、多少関連しているので、リンクを投稿します。

于 2008-08-22T11:24:42.500 に答える
0

Dr Zimが行ったことをちょっとやりましたが、DTExecファイルC:\Program Files (x86)\Microsoft SQL Server\90\DTS\Binn\DTExec.exeC:\Program Files\Microsoft SQL Server\90\DTS\Binn\フォルダーにコピーしましたが、32ビットのファイルにDTExec32.exeという名前を付けました

次に、ストアド プロシージャを介して SSIS スクリプトを実行できました。

set @params = '/set \package.variables[ImportFilename].Value;"\"' + @FileName + '\"" '
set @cmd =  'dtexec32 /SQ "' + @packagename + ' ' + @params + '"'
--DECLARE @returncode int
exec master..xp_cmdshell @cmd
--exec @returncode = master..xp_cmdshell @cmd
--select @returncode
于 2009-04-21T21:15:24.760 に答える