我正在开发并于2012年SQL测试的SSIS包从文本文件导入行到一个临时表(即每次执行之前截断)使用脚本任务。然后使用Execute SQL任务运行存储过程,然后该存储过程查询登台表并格式化数据以插入到最终表中。存储过程失败在执行SQL任务,但手动成功
目前我只用两个不同的文件测试。这些文件是每天收到的独立电子邮件,我在Outlook中配置为另存为文本文件。每个文件都重命名为YYYYDDMM_HHMMSS_ [文件名] .txt。我的SSIS包使用For Each循环将该文件名分配给一个变量@AckFileName,该变量传入我的存储过程并从中解析文件日期时间。
所以我的存储过程的第一行是:
SELECT DISTINCT CONVERT(datetime,left(@AckFileName,8)+' '+substring(@AckFileName,10,2)+':'+substring(@AckFileName,12,2)+':'+substring(@AckFileName,14,2))
当我在SSMS运行存储过程是否能够正常工作:
Exec [dbo].[ParseAckFile] @AckFileName
然而,即使我有同样的相同代码对于我执行SQL任务中的SQL语句,我收到以下错误:
"Exec [dbo].[ParseAckFile]..." failed with the following error: "Conversion failed when converting date and/or time from a character string."
好吧,所以这似乎很简单/足够明显...除了我的存储过程中的查询将字符串转换为日期时间,所以它应该也会在手动运行时返回一个错误,是否正确?我已经用每个文件测试过了,结果是一样的 - proc可以用任何一个文件手动运行,但执行SQL任务失败。
此外:我试着在Execute SQL任务中设置Delay Validation = True,使用OLEDB或ADO.NET连接到我的最终表,并使用Execute SQL任务中的表达式构建我的查询。这些尝试都没有对我收到的错误消息产生任何影响。
我可以尝试其他建议吗?
你试过看探查器跟踪,以验证您的SSIS包发送你认为它是参数值? –
是@TabAlleman,参数中的文件名是我期待的。我只是发现了一些东西 - 为了测试,我在存储过程中对文件名进行了硬编码,然后从Execute SQL命令中删除了参数。它工作正常。现在我想知道,即使我的参数是Varchar,如果我可能需要将它封装在proc中的单引号内?我需要做更多的测试...... –