ssis - 将变量值INSERT到表中

时间:2010-07-22 10:54:57

标签: sql-server sql-server-2005 ssis

我在SSIS包中有几个变量,我想插入表中。

例如: -

@financialMonth, @Status, @Comments

变量已经填充了基于查找,文件名,日期等的值,我希望将它们存储在结果表中。

正在使用执行SQL任务的方式吗?

我是否需要调用一个sproc并将这些变量作为参数传递?

我尝试将以下T-SQL放入SQLStatement属性

INSERT INTO FilesProcessed 
   (ProcessedOn, ProviderCode, FinancialMonth, 
   FileName, Status, Comments) 
SELECT     GETDATE(), 'ABC' , 201006, 
   'ABC_201005_Testology.csv', 
   'Imported','Success' 

我尝试对上面的值进行硬编码以使其正常工作

这些是我插入的表格中的列

Column_name     Type         Computed  Length
fileID          int          no          4
ProcessedOn     datetime     no          8
ProviderCode    nchar        no          6
FinancialMonth  int          no          4
FileName        nvarchar     no        510
Status          nvarchar     no         40
Comments        nvarchar     no        510

这是提供SQLStatementSource属性的表达式代码

"INSERT INTO FilesProcessed (ProcessedOn, ProviderCode, FinancialMonth, 
  FileName, Status, Comments) SELECT     GETDATE() AS ProcessedOn, '"
  + @[User::providerCode] + "' , " 
  + (DT_STR,6,1252)@[User::financialMonth] + ", '" 
  + @[User::fileName] + "', 'Imported' AS Status,'Successfully' AS Comments "

不幸的是,我错过了一些东西,但却无法让它发挥作用。

  

我得到的错误信息是......   错误:0xC002F210在日志条目中   FilesProcessed,执行SQL任务:   执行查询“INSERT INTO   FilesProcessed(ProcessedOn,   ProviderCode,FinancialMonth,   FileName,Status,Comments)SELECT
  GETDATE(),'ABC',201006,   'DAG_201005_Testology.csv',   “导入”,“成功”失败了   以下错误:“错误   在提取结果时发生   到一个类型的变量(DBTYPE_I2)“。   可能的失败原因:问题   使用查询“ResultSet”属性   未正确设置,参数未设置   正确,或连接不   建立正确。

A)。建议执行SQL任务是否是我想做的事情。

B)。给我任何指示或陷阱,以留意并检查。

提前致谢。

4 个答案:

答案 0 :(得分:5)

好的,这就是我做的。

我创建了一个执行SQL任务并进行了配置,因此: -

General Tab
  ConnectionType = OLE DB
  SQLSourceType = Direct Input
  SQLStatement = (left blank)
  BypassPrepare = True
  ResultSet = None

Parameter Mapping
  (none - leave blank)

Result Set
  (none - leave blank)

Expressions
  SQLStatementSource = "INSERT INTO FilesProcessed (ProcessedOn, ProviderCode, FinancialMonth, FileName, Status, Comments) SELECT GETDATE(), '" + @[User::providerCode] + "' , " + (DT_STR,6,1252)@[User::financialMonth] + ", '" + @[User::fileName] + "', 'Import - Success', '" + @[User::fileComments] + "'"

然后只要我设置变量并在变量窗口中填充它们(表达式编辑器不会让你保存一个引用不存在的变量的表达式。当你回去时,保持记事本方便存储内容并编辑变量窗口,并在;)

中添加新变量

慢慢构建表达式,定期使用Parse表达式按钮进行检查。

答案 1 :(得分:1)

答案 2 :(得分:0)

一些推测性的建议

  1. 错误消息显示将结果提取到类型变量(DBTYPE_I2)时发生错误。但这是一个直接的插入声明。除了受影响的行外,不应该有结果。您是否将任何参数映射错误地设置为Output

  2. 如果您尝试直接在管理工作室中运行错误消息中的SQL查询,该怎么办?这会给你一个错误吗?

答案 3 :(得分:0)

在上面的表中将FinancialMonth定义为int数据类型为

FinancialMonth int no 4

同时将铸造视为

(适用DT_STR,6,1252)@ [用户:: financialMonth]

我觉得这纯粹是与目标表定义不匹配的数据类型。

感谢

prav