SSIS调用Python脚本的包在SQL Server Agent中执行失败
问题排查与解决建议
1. 核查代理账户权限
- 代理账户必须对
\\org\data\project共享文件夹拥有读写权限:手动运行时用的是你的本地账户,而SQL Server Agent执行时用的是代理账户,二者权限可能存在差异。可以用代理账户登录服务器,手动访问共享路径,尝试打开Excel文件、创建/修改CSV文件,验证权限是否正常。 - 同时确保代理账户能访问Python安装目录
C:\Program Files\Python311\,至少具备读取python.exe的权限。
2. 修正脚本中的路径错误
你脚本里的UNC路径多写了一个反斜杠,正确格式应为双反斜杠开头,修改如下:
print('Start CSV File Conversion') import pandas as pd from pandas import DataFrame, read_csv # 修正UNC路径格式 file = r'\\org\data\project\test.xlsm' dframe = pd.read_excel(file, sheet_name='data', engine='openpyxl') # 统一用小写r前缀,保持格式规范 export_csv = dframe.to_csv(r'\\org\data\project\test.csv', index=None, header=True, sep='~') print(dframe) print('...Completed')
(注:读取.xlsm文件需要指定engine='openpyxl',因为xlrd已不再支持此类格式)
3. 确认Python环境依赖
SQL Server Agent运行时可能未加载你本地的Python环境,需确保代理账户可访问的Python环境中安装了必要依赖:
- 用代理账户身份打开命令提示符,执行以下命令检查依赖:
C:\Program Files\Python311\python.exe -m pip list
- 若缺少
pandas或openpyxl,执行安装命令:
C:\Program Files\Python311\python.exe -m pip install pandas openpyxl
4. 捕获脚本错误详情
错误码1仅表明脚本运行失败,无法定位具体问题。修改脚本添加异常捕获,将错误信息输出到日志文件:
print('Start CSV File Conversion') import pandas as pd import traceback try: file = r'\\org\data\project\test.xlsm' dframe = pd.read_excel(file, sheet_name='data', engine='openpyxl') export_csv = dframe.to_csv(r'\\org\data\project\test.csv', index=None, header=True, sep='~') print(dframe) print('...Completed') except Exception as e: # 将错误写入共享路径下的日志文件 with open(r'\\org\data\project\py_error.log', 'w') as f: f.write(f"Error message: {str(e)}\n") f.write("Traceback:\n") traceback.print_exc(file=f) exit(1)
执行后查看py_error.log,即可获取具体报错原因。
5. 检查SQL Server Agent运行环境
- 若SSIS包是32位环境开发,而SQL Server Agent默认用64位运行,可能导致Python环境不兼容。在SQL Server Agent作业步骤中,勾选使用32位运行时(针对SSIS包步骤),或确保安装的是64位Python版本。
- 确认代理账户是否具备网络共享访问权限:部分服务账户默认无法访问网络共享,可在代理账户属性中勾选允许此代理模拟用户,或在Execute Process Task中明确指定共享路径的UNC格式(避免使用映射盘符)。
内容的提问来源于stack exchange,提问作者Learn
相关产品推荐
相关产品推荐

