Tipos de datos de Integration Services en las expresiones
El evaluador de expresiones utiliza tipos de datos de Integration Services. Cuando los datos entran por primera vez en un flujo de datos de un paquete Integration Services, el motor de flujo de datos convierte todos los datos de columna a un tipo de datos de Integration Services y los datos de columna ya utilizados por una expresión a un tipo de datos de Integration Services. Las expresiones usadas en las transformaciones División condicional y Columna derivada pueden hacer referencia a columnas, ya que forman parte de un flujo de datos que incluye datos de columna.
Las expresiones también pueden usar variables. Las variables tienen un tipo de datos Variant. El evaluador de expresiones convierte el tipo de datos de una variable de un subtipo Variant a un tipo de datos de Integration Services antes de evaluar la expresión. Las variables solo pueden usar un subconjunto de los tipos de datos de Integration Services. Por ejemplo, una variable no puede usar un tipo de datos de Bloque de objetos binarios grandes (BLOB).
Para obtener más información sobre tipos de datos de Integration Services y sobre la asignación de tipos de datos Variant a tipos de datos de Integration Services, vea Tipos de datos de Integration Services.
Además, las expresiones pueden incluir literales de cadena, booleanos y numéricos. El evaluador de expresiones siempre convierte los literales de cadena al tipo de datos DT_WSTR y los literales booleanos al tipo de datos DT_BOOL. Interpreta todos los valores entrecomillados como cadenas. Los literales numéricos se convierten a uno de los tipos de datos numéricos de Integration Services. Para obtener más información sobre cómo convertir literales numéricos en tipos de datos numéricos de Integration Services, vea Literales (SSIS).
Nota
Los valores booleanos son valores lógicos, no son números. Aunque los valores booleanos pueden mostrarse como números en algunos entornos, no se almacenan como números, y varios lenguajes de programación representan los valores booleanos como valores numéricos de maneras diferentes, como sucede con los métodos de .NET Framework.
Por ejemplo, las funciones de conversión disponibles en Visual Basic convierten el valor True en -1; sin embargo, el método System.Convert.ToInt32 de .NET Framework convierte True en +1. Por su parte, el lenguaje de expresiones de Integration Services convierte True en -1.
Para evitar errores o resultados inesperados, no debe escribirse código que se base en valores numéricos específicos para True y False. Siempre que sea posible, se debe restringir el uso de las variables booleanas a los valores lógicos para los que están diseñadas.
Requisitos de los datos que se utilizan en expresiones
El evaluador de expresiones admite todos los tipos de datos de Integration Services. Sin embargo, en función de la operación o la función, los operandos y los argumentos requieren determinados tipos de datos. El evaluador de expresiones impone los siguientes requisitos de tipo de datos a los datos usados en expresiones:
Los operandos usados en operaciones lógicas deben contener un valor booleano. Por ejemplo, ColumnaA > 1&&ColumnaB < 2.
Los operandos usados en operaciones matemáticas deben contener un valor numérico. Por ejemplo, 23,75 * 4.
Los operandos utilizados en operaciones de comparación, como operaciones lógicas y de igualdad, deben devolver tipos de datos compatibles.
Por ejemplo, una de las expresiones del ejemplo siguiente usa el tipo de datos DT_DBTIMESTAMPOFFSET:
(DT_DBTIMESTAMPOFFSET,3) "1999-10-11 20:34:52.123 -3:30" != (DT_DBDATE)"1999-10-12"
El sistema convierte la expresión, (DT_DBDATE)"1999-10-12" en DT_DBTIMESTAMPOFFSET. El ejemplo devuelve TRUE porque la expresión convertida pasa a ser "1999-10-12 00:00:00.000 +00: 00", que no es igual que el valor de la otra expresión, (DT_DBTIMESTAMPOFFSET,3) "1999-10-11 20:34:52.123 -3:30".
Los argumentos pasados a funciones matemáticas deben devolver un tipo de datos numérico. Dependiendo de la función o la operación, puede ser necesario usar un tipo de datos numérico específico. Por ejemplo, la función HEX requiere un entero con o sin signo.
Los argumentos pasados a funciones de cadena debe contener un tipo de datos de carácter: DT_STR o DT_WSTR. Por ejemplo, UPPER("flor"). Algunas funciones de cadena, como SUBSTRING, requieren argumentos enteros adicionales para la posición inicial y la longitud de la cadena.
Los argumentos pasados a funciones de fecha y hora deben contener una fecha válida. Por ejemplo, DAY(GETDATE()). Algunas funciones, como DATEADD, requieren un argumento entero adicional para el número de días que la función agrega a una fecha.
Las operaciones que combinan un entero de ocho bytes sin signo y un entero con signo requieren una conversión explícita para definir el formato del resultado. Para obtener más información, vea Cast (expresión de SSIS): conversión de tipos de datos de SSIS.
Los resultados de muchas operaciones y funciones tienen tipos de datos predeterminados. Pueden ser el tipo de datos del argumento o el tipo de datos al que el evaluador de expresiones convierte el resultado. Por ejemplo, el resultado de un operador lógico OR (||) es siempre un valor booleano, el resultado de la función ABS es el tipo de datos numérico del argumento y el resultado de la multiplicación es el tipo de datos numérico más pequeño que puede contener el resultado sin perder información. Para obtener más información sobre los tipos de datos de los resultados, vea Operadores (expresión de SSIS) y Funciones de cadena y otras funciones (Expresión de SSIS).
Recursos externos
Artículo técnico, SSIS Expression Cheat Sheet, en pragmaticworks.com
Artículo técnico, SSIS Expression Examples, en social.technet.microsoft.com