sql-server - uso - ssis variables in sql command
Capture el valor agregado de la tarea de flujo de datos en una variable (2)
Una forma de hacerlo sería agregar una transformación de multidifusión entre el origen y el destino que también se alimenta en un componente de script.
Mientras que una transformación agregada también funcionaría, este método evita agregar una transformación de bloqueo
Configure el componente de secuencia de comandos como destino, asígnele acceso de lectura / escritura a la variable y luego edite la secuencia de comandos para que sea similar a
//Instance level variable
DateTime? maxDate = null;
public override void PostExecute()
{
base.PostExecute();
if (maxDate.HasValue)
{
this.Variables.MaxDate = maxDate.Value;
}
System.Windows.Forms.MessageBox.Show(this.Variables.MaxDate.ToString());
}
public override void Input0_ProcessInputRow(Input0Buffer Row)
{
if (!Row.createdate_IsNull)
{
maxDate = Row.createdate < maxDate ? maxDate : Row.createdate;
}
}
Tengo un origen de flujo de datos OLEDB (SQL) (A) que extrae un conjunto de resultados de un procedimiento almacenado y arroja los resultados en un destino de flujo de datos OLEDB (Oracle) (B).
¿Hay alguna manera de capturar un valor agregado del conjunto de datos en una variable, todo dentro de la tarea de flujo de datos? Específicamente, me gustaría capturar el MAX(<DateValue>)
de todo el conjunto de datos.
De lo contrario, tendría que extraer los mismos datos dos veces en una tarea de flujo de datos diferente, ya sea que apunte a A o en su nueva ubicación, B.
EDITAR: Ya sé cómo hacer esto en Control Flow desde una tarea de ejecución de SQL. Pregunto porque tengo curiosidad por saber si puedo hacer esto en la tarea de flujo de datos ya que ya estoy recopilando los datos allí. ¿Hay alguna forma de obtener un valor agregado en el flujo de datos?
- U mantenga su DFT actual como tal en el flujo de control (asignación de fuente a destino como tal)
- En el flujo de control, agregue una tarea Exceute SQL, con la misma consulta de origen con la función MAX () deseada aplicada en ella.
Eg:
--Let the given be Your source query.
SELECT ColumnA,
ColumnB,
ColumnC,
DateValue
FROM SourceA
--Your new query to calculate MAX() may be this.
SELECT MAX(DateValue)
FROM SourceA
Proporcione el segundo SQL en la tarea SQL de ejecución. En el paquete, agregue una variable de tipo int, en el ámbito del paquete. (por ej .: nombre = intMax)
In the Execute SQL task, not the following.
a.general Tab
Result Set = Single Row
Sql Statement = SELECT MAX(DateValue) FROM SourceA
b.result set Tab
click ADD
ResultName = 0
variable Name = variable Name (eg: name = intMax)
El resultado requerido estará disponible en la variable desde aquí en adelante.