Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 将变量值插入表中_Sql Server_Sql Server 2005_Ssis - Fatal编程技术网

Sql server 将变量值插入表中

Sql server 将变量值插入表中,sql-server,sql-server-2005,ssis,Sql Server,Sql Server 2005,Ssis,在SSIS包中有几个变量,我希望将它们插入到表中 例如:- @financialMonth, @Status, @Comments 这些变量一直都使用基于查找、文件名、日期等的值填充,我想将它们存储在结果表中 使用executesql任务是实现这一点的方法吗 我是否需要调用存储过程并将这些变量作为参数传递 我已尝试将以下T-SQL放入SQLStatement属性 INSERT INTO FilesProcessed (ProcessedOn, ProviderCode, Financi

在SSIS包中有几个变量,我希望将它们插入到表中

例如:-

@financialMonth, @Status, @Comments
这些变量一直都使用基于查找、文件名、日期等的值填充,我想将它们存储在结果表中

使用executesql任务是实现这一点的方法吗

我是否需要调用存储过程并将这些变量作为参数传递

我已尝试将以下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 已处理文件,执行SQL任务: 执行查询“插入到” 文件已处理(已处理), 供应商代码,财务月, 文件名、状态、注释)选择
GETDATE(),'ABC',201006, “DAG_201005_Testology.csv”, “已导入”,“成功”失败,错误为 下面的错误:“一个错误 提取结果时发生 转换为类型为(DBTYPE_I2)”的变量。 可能的故障原因:问题 使用查询“ResultSet”属性 未正确设置,未设置参数 正确,或连接不正确 正确建立

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

b) 。给我任何要注意和检查的提示或陷阱


提前感谢。

确保值的数据类型与目标列数据类型匹配


请参阅:

一些推测性的建议

  • 错误消息表示将结果提取到类型为(DBTYPE_I2)的变量时出错。但这是一个直接的insert语句。除了受影响的行之外,不应该有结果。是否有任何参数映射错误地设置为
    输出

  • 如果您尝试直接在ManagementStudio中从错误消息运行SQL查询,会怎么样?这会给你一个错误吗


  • 在上表中,定义FinancialMonth为int数据类型为

    金融月国际4号

    插入铸件时,如下所示:

    (DT_STR,6,1252)@[User::financialMonth]
    

    我认为这纯粹是数据类型与目标表定义不匹配。

    好的,下面是我所做的

    我创建了一个执行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 expression按钮进行检查。

    从我对SSI的记忆来看,这似乎应该是可行的。(虽然很明显,您发布的代码根本没有使用变量)您遇到了什么错误?请尝试删除“as status”和“as comments”我粘贴了用于创建t-SQL的表达式代码。我试图硬编码T-SQL,看看更简单的代码是否有效。