如何使用 SQL 任务更新表

Posted

技术标签:

【中文标题】如何使用 SQL 任务更新表【英文标题】:How to use SQL Task to update a table 【发布时间】:2015-07-08 02:39:13 【问题描述】:

我有这个 SQL 来更新我表中的修改记录。它在 SSMS 中运行,但我如何在 SSIS 包中实现它?我尝试使用 SQL 任务,但它无法识别列。

我可以在数据流 ole db 源(sql 命令具有 select 语句)中放置一个选择,为我的导入日期派生列,然后使用 ole db 目标来更新记录 - 但是要更新的 sql 命令的语法是什么?

update nss.MKT_CUSTOM
set 
      [INSURED_NUMBER] = stg_MKT_CUSTOM.[INSURED_NUMBER]
      ,[SALES_AGENCY_NUMBER] = stg_MKT_CUSTOM.[SALES_AGENCY_NUMBER]
      ,[PRODUCT_CODE] = stg_MKT_CUSTOM.[PRODUCT_CODE]
      ,[INS_MKT_INFO_SRC_CREATE_DATE] = stg_MKT_CUSTOM.[INS_MKT_INFO_SRC_CREATE_DATE]
      ,[INS_MKT_INFO_SRC_CREATE_USER] = stg_MKT_CUSTOM.[INS_MKT_INFO_SRC_CREATE_USER]
      ,[MKT_INFO_SRC_CODE] = stg_MKT_CUSTOM.[MKT_INFO_SRC_CODE]
      ,[MKT_INFO_SRC_DESC_EN] = stg_MKT_CUSTOM.[MKT_INFO_SRC_DESC_EN]
      ,[MKT_INFO_SRC_DESC_FR] = stg_MKT_CUSTOM.[MKT_INFO_SRC_DESC_FR]
      ,[MKT_INFO_SRC_START_DATE] = stg_MKT_CUSTOM.[MKT_INFO_SRC_START_DATE]
      ,[MKT_INFO_SRC_END_DATE] = stg_MKT_CUSTOM.[MKT_INFO_SRC_END_DATE]
      ,[MKT_INFO_SRC_CREATE_DATE] = stg_MKT_CUSTOM.[MKT_INFO_SRC_CREATE_DATE]
      ,[MKT_INFO_SRC_MOD_DATE] = stg_MKT_CUSTOM.[MKT_INFO_SRC_MOD_DATE]
      ,[MKT_INFO_SRC_CLIENT_CODE] = stg_MKT_CUSTOM.[MKT_INFO_SRC_CLIENT_CODE]
      ,[MKT_INFO_SRC_CAT_CODE] = stg_MKT_CUSTOM.[MKT_INFO_SRC_CAT_CODE]
      ,[MKT_INFO_SRC_CAT_DESC_EN] = stg_MKT_CUSTOM.[MKT_INFO_SRC_CAT_DESC_EN]
      ,[MKT_INFO_SRC_CAT_DESC_FR] = stg_MKT_CUSTOM.[MKT_INFO_SRC_CAT_DESC_FR]
      ,[MKT_INFO_SRC_CAT_CREATE_DATE] = stg_MKT_CUSTOM.[MKT_INFO_SRC_CAT_CREATE_DATE]
      ,[MKT_INFO_SRC_CAT_MOD_DATE] = stg_MKT_CUSTOM.[MKT_INFO_SRC_CAT_MOD_DATE]
      ,[IMPORT_DATE] = GETDATE()
from 
    nss.stg_MKT_CUSTOM
inner join
    MKT_CUSTOM on (stg_MKT_CUSTOM.INS_MKT_INFO_SRC_ID = MKT_CUSTOM.INS_MKT_INFO_SRC_ID)
where 
    (stg_MKT_CUSTOM.MKT_INFO_SRC_MOD_DATE <> MKT_CUSTOM.MKT_INFO_SRC_MOD_DATE 
     or stg_MKT_CUSTOM.MKT_INFO_SRC_CAT_MOD_DATE <> MKT_CUSTOM.MKT_INFO_SRC_CAT_MOD_DATE)

【问题讨论】:

你能在执行 SQL 任务中做到吗? 【参考方案1】:

如果您需要在数据流任务中执行更新操作,则需要使用 OLE DB 命令组件。

但是,由于我在您的语句中看不到任何参数/变量,您可以尝试在控制流面板中使用 Execute Sql Task。

【讨论】:

我在执行 SQl 任务中确实有它(在控制流面板中)。当我运行它时,我的 exe 结果显示此错误:[Execute SQL Task] 错误:执行查询“update nss.MKT_CUSTOM set [INSURED_NUMBER] = stg_...”失败并出现以下错误:“')' 附近的语法不正确."。可能的失败原因:查询有问题,“ResultSet”属性设置不正确,参数设置不正确,或者连接没有正确建立。 不幸的是,在不知道您的表结构的情况下,我无法从您的语句中找出错误。如果上面的语句可以在SSMS中运行,你可以做的是1添加一个using子句来验证连接问题2确保结果集中的选项是NONE,3将BypassPrepare更改为false,然后单击Parse Query按钮来验证你的sql语句组件是正确的【参考方案2】:

在这种情况下,我尝试将您的更新放入新的 sql 过程中, 并在执行 sql-task 我尝试执行它。

【讨论】:

以上是关于如何使用 SQL 任务更新表的主要内容,如果未能解决你的问题,请参考以下文章

如何在 SQL 中使用触发器来更新一行,基于另外两行

如何使用 Spark sql 在 Databricks 中使用内部联接更新 Databricks Delta 表

SQL UPDATE - 如何使用另一个表更新一个表中的列?

(Oracle SQL) 如何在插入后使用唯一键更新表?

如何在使用触发器的 SQL 插入后更新另一个表

如何使用 vb.net 中 excel 表中的数据更新 sql 表