Как выполнить хранимую процедуру на ODBC Snowflake Destinastion? - PullRequest
0 голосов
/ 15 мая 2019

Я создаю новый пакет для перемещения данных из экземпляра сервера aws sql в пункт назначения снежинки odbc. Если я нашел строки, которые были обновлены, я должен изменить их и на снежинке. В общих чертах я нашел только «Команду OLE DB» для выполнения процедуры обновления различных строк.

Проблема в том, что мне нужно что-то вроде "ODBC Command" для выполнения процедуры обновления различных строк между SQL Server и Snowflake.

1 Ответ

0 голосов
/ 21 мая 2019

ОК, я делаю это.

Так что, если вам нужны строки ОБНОВЛЕНИЯ по назначению ODBC в SSIS, у вас есть только один способ сделать это, вам нужно использовать компонент сценария.Прежде чем я подумал, что это будет что-то вроде ODBC Command, нам нужно написать хранимую процедуру для изменения строк в месте назначения.Я связываю это с теми, кто заботится о будущем в будущем.

Преобразование «Команда OLE DB» выполняет оператор SQL для каждой строки в потоке данных.Например, вы можете запустить оператор SQL, который вставляет, обновляет или удаляет строки в таблице базы данных. Описание команды Microsoft OLE DB

Я написал простой код на 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();

    }
}
...