如何在 ODBC Snowflake Destination 中执行存储过程?

How to execute stored procedure on ODBC Snowflake Destinastion?

我正在构建新包以将数据从 aws sql 服务器实例移动到 snowflake odbc 目标。如果我发现已更新的行,我也必须在雪花上更改它们。在常见的情况下,我只发现 'OLE DB Command' 用于更新不同行的执行过程。

问题是我需要类似 "ODBC Command" 的东西来执行程序来更新 SQL Server 和 Snowflake 之间的不同行。

好的,我来做。

因此,如果您需要更新 SSIS 中 ODBC 目标上的行,您只有一种方法可以做到这一点,您需要使用脚本组件。在我认为它会类似于 ODBC 命令之前,我们需要编写存储过程来更改目标中的行。我 link 对于未来关心的人。

The OLE DB Command transformation runs an SQL statement for each row in a data flow. For example, you can run an SQL statement that inserts, updates, or deletes rows in a database table. 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();

    }
}