如何在ODBC Snowflake Destinastion上执行存储过程?

时间:2019-05-15 08:03:54

标签: sql-server ssis snowflake

我正在构建新的程序包,用于将数据从AWS sql服务器实例移动到雪花odbc目标。如果我发现行已更新,则也必须在雪花上进行更改。在常见的情况下,我只为更新不同行的执行过程找到了“ OLE DB命令”。

问题是我需要“ ODBC命令”之类的内容来执行过程,以更新SQL Server和Snowflake之间的不同行。

1 个答案:

答案 0 :(得分:0)

好,我做到了。

因此,如果您需要SSIS中ODBC目标上的UPDATE行,则只有一种方法可以使用脚本组件。在我以为这就像ODBC Command之前,我们将需要编写存储过程来更改目标中的行。我将其链接到将来关心的人。

  

OLE DB Command转换为数据流中的每一行运行一个SQL语句。例如,您可以运行一条SQL语句来插入,更新或删除数据库表中的行。   Microsoft OLE DB Command description

我用c#编写了一个简单的代码来更新行,它运行完美。您可以简单地将其重建以执行过程或执行您需要执行的任何操作。

public class ScriptMain : UserComponent
 {
  OdbcConnection odbcConn;
  OdbcCommand odbcCmd;
  OdbcParameter odbcParam;

public override void AcquireConnections(object Transaction)
  {
    /// Create a String base on that which u define on package for connection and 
        adding a password

    string connectionString;
    connectionString = this.Connections.SFConnection.ConnectionString;
    odbcConn = new OdbcConnection(connectionString + "PWD=YOURPASSWORD");
    odbcConn.Open();
    }

public override void PreExecute()
{
    ///Create command which we wanna execute

    base.PreExecute();
    odbcCmd = new OdbcCommand("UPDATE klienci SET IMIE= ?,NAZWISKO= ? ,NUMER_TELEFONU= ? ,EMAIL= ? ,ULICA= ? ,MIASTO= ? ,STATE= ? ,ZIP_CODE = ? WHERE CUSTOMER_ID= ?", odbcConn);

}

public override void Input0_ProcessInputRow(Input0Buffer Row)
    {
      ///Adding parameters and connecting them with our input column from package

    odbcCmd.Parameters.AddWithValue("@IMIE", Row.Sourcefirstname);
    odbcCmd.Parameters.AddWithValue("@NAZWISKO", Row.Sourcelastname);
    odbcCmd.Parameters.AddWithValue("@NUMER_TELEFONU", Row.Sourcephone);
    odbcCmd.Parameters.AddWithValue("@EMAIL", Row.Sourceemail);
    odbcCmd.Parameters.AddWithValue("@ULICA", Row.Sourcestreet);
    odbcCmd.Parameters.AddWithValue("@MIASTO", Row.Sourcecity);
    odbcCmd.Parameters.AddWithValue("@STATE", Row.Sourcestate);
    odbcCmd.Parameters.AddWithValue("@ZIP_CODE", Row.Sourcezipcode);
    odbcCmd.Parameters.AddWithValue("@CUSTOMER_ID", Row.Sourcecustomerid);
    odbcCmd.ExecuteNonQuery();

    }
}