【问题标题】:Execute SQL Task fails in SSIS 2008 package but runs successfully outside package在 SSIS 2008 包中执行 SQL 任务失败,但在包外成功运行
【发布时间】:2013-01-03 16:00:22
【问题描述】:

我创建了一个执行 sql 任务来将 Foreach 循环任务中遇到的文件名保存到数据库表中, 当我运行单个任务并将文件名写入数据库表时,这工作正常(见下文) 当前无法发布图片 ![任务成功运行][1] 但是,当我运行完整的 SSIS 包时,此任务失败(见下文) 当前无法发布图片

![执行失败][2] 我收到的错误消息是:

Error: String or binary data would be truncated.
[Execute SQL Task] Error: Executing the query "insert into filename_staging_table
(FileName) Val..." failed with the following error: 
"The statement has been terminated.". Possible
failure reasons: Problems with the query,
"ResultSet" property not set correctly, parameters
not set correctly,
or connection not established correctly.

任何与此有关的指导都非常感谢....我完全被卡住了!!!!

谢谢

【问题讨论】:

  • 虽然在您的声誉级别更高之前您无法使用集成图像选项,但您可以手动将它们发布到某个位置,然后在此处链接它们。这将使您更容易理解您的包装设计。
  • SSIS 包是否在您的凭据下运行?也许这可能是一个安全问题。
  • 听起来您的插入试图将太宽的数据条目塞入列中。您能否验证所有插入的列的值都在表中的最大宽度范围内吗?
  • 请发布您保存文件名的表的结构以及您的插入语句/存储过程调用。难道你的意图是只存储一个文件名foo.bar,但你实际上写的是C:\folder1\folder2\foo.bar,这超出了你的列长度?
  • 您说您正在循环中运行 - 您尝试在循环中输入的值之一是否比基础列的数据类型长?

标签: sql ssis


【解决方案1】:

错误显示“字符串或二进制数据将被截断”。脚本在手动运行时起作用的原因是因为您只尝试插入一个值。该值在列的长度限制范围内。

当您运行任务时,它会循环遍历文件名列表并尝试插入每个文件名。这些名称之一对于您尝试将其插入的字段来说太长了。

您需要在 SQL 中更改字段的长度,或者您需要在文件名本身上使用 LEFT(filename, xx),以便仅将前 xx 个字符插入到您的表中。 (把xx改成要插入的字符数)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-30
    相关资源
    最近更新 更多