我正在构建新的程序包,用于将数据从AWS sql服务器实例移动到雪花odbc目标。如果我发现行已更新,则也必须在雪花上进行更改。在常见的情况下,我只为更新不同行的执行过程找到了“ OLE DB命令”。
问题是我需要“ ODBC命令”之类的内容来执行过程,以更新SQL Server和Snowflake之间的不同行。
答案 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();
}
}