7

我有一个 SSIS 包,可以将数据导出到几个 Excel 文件以传输给第三方。为了让它在 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:

感谢您的帮助,但我现在决定使用 CSV 文件,因为它们似乎只适用于 64 位版本。

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 - 安装的那个Program Files (x86)\Microsoft Sql Server\90\Dts\Binn(如果您使用的是 SSIS 2008 ,请将90替换为100 )。

于 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

我做了 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 回答