Share via


Trabajar con conjuntos de resultados en la tarea Ejecutar SQL

En un paquete de Integration Services, el que se devuelva un conjunto de resultados a la tarea Ejecutar SQL depende del tipo de comando SQL que la tarea use. Por ejemplo, una instrucción SELECT normalmente devuelve un conjunto de resultados, pero una instrucción INSERT no.

El contenido del conjunto de resultados también varía en función del comando SQL. Por ejemplo, el conjunto de resultados de una instrucción SELECT puede contener cero filas, una fila o muchas filas. Sin embargo, el conjunto de resultados de una instrucción SELECT que devuelve un recuento o suma contiene exclusivamente una fila.

Trabajar con conjuntos de resultados en una tarea Ejecutar SQL es algo más que saber si el comando SQL devuelve un conjunto de resultados y cuál es el contenido de este. Existen requisitos de uso e instrucciones adicionales para usar correctamente los conjuntos de resultados en la tarea Ejecutar SQL. El resto de este tema abarca estos requisitos de uso e instrucciones:

  • Especificar un tipo de conjunto de resultados

  • Llenar una variable con un conjunto de resultados

  • Configurar conjuntos de resultados en el editor de la tarea Ejecutar SQL

Especificar un tipo de conjunto de resultados

La tarea Ejecutar SQL admite los siguientes tipos de conjuntos de resultados:

  • El conjunto de resultados Ninguno se usa cuando la consulta no devuelve ningún resultado. Por ejemplo, este conjunto de resultados se usa para consultas que agregan, cambian y eliminan registros de una tabla.

  • El conjunto de resultados Fila única se usa cuando la consulta devuelve una sola fila. Por ejemplo, este conjunto de resultados se usa en una instrucción SELECT que devuelve un recuento o suma.

  • El conjunto de resultados Conjunto de resultados completo se usa cuando la consulta devuelve múltiples filas. Por ejemplo, este conjunto de resultados se usa para una instrucción SELECT que recupera todas las filas de una tabla.

  • El conjunto de resultados XML se usa cuando la consulta devuelve un conjunto de resultados en formato XML. Por ejemplo, este conjunto de resultados se usa para una instrucción SELECT que incluya una cláusula FOR XML.

Si la tarea Ejecutar SQL usa el conjunto de resultados Conjunto de resultados completo y la consulta devuelve varios conjuntos de filas, la tarea solo devuelve el primero de ellos. Si el primer conjunto de filas genera un error, la tarea lo notifica. Si otros conjuntos de filas generan errores, la tarea no los notifica.

En función del tipo de administrador de conexiones, los valores devueltos por la instrucción SQL que aún no son cadenas podrían convertirse implícita o explícitamente en cadenas. Un administrador de conexiones ADO u ODBC convierte implícitamente los valores devueltos en cadenas. Un administrador de conexiones OLE DB convierte explícitamente los valores devueltos del tipo de datos DBTYPE_I8, DBTYPE_UI8, DBTYPE_NUMERIC, DBTYPE_GUID y DBTYPE_BYTES en cadenas. Sin embargo, un administrador de conexiones de ADO.NET no convierte los valores devueltos en cadenas.

Llenar una variable con un conjunto de resultados

Puede enlazar el conjunto de resultados devuelto por una consulta con una variable definida por el usuario si el tipo del conjunto de resultados es una fila individual, un conjunto de filas o XML.

Si el tipo de conjunto de resultados es Fila única, puede enlazar una columna del resultado devuelto a una variable utilizando el nombre de la columna como nombre del conjunto de resultados, o puede usar la posición ordinal de la columna en la lista de columnas como dicho nombre. Por ejemplo, el nombre del conjunto de resultados para la consulta SELECT Color FROM Production.Product WHERE ProductID = ? puede ser Color o 0. Si la consulta devuelve varias columnas y desea obtener acceso a los valores de todas ellas, debe enlazar cada columna a una variable distinta. Si asigna columnas a variables utilizando números como nombre de los conjuntos de resultados, los números reflejan el orden de aparición de las columnas en la lista de columnas de la consulta. Por ejemplo, en la consulta SELECT Color, ListPrice, FROM Production.Product WHERE ProductID = ?, puede usar 0 para la columna Color y 1 para la columna ListPrice. La capacidad de usar un nombre de columna como nombre del conjunto de resultados dependerá del proveedor para el que se haya configurado la tarea. No todos los proveedores ponen los nombres de columna a disposición.

Es posible que algunas consultas que devuelven un valor único no incluyan nombres de columnas. Por ejemplo, la instrucción SELECT COUNT (*) FROM Production.Product no devuelve un nombre de columna. Puede tener acceso al resultado devuelto utilizando la posición ordinal 0 como nombre del resultado. Para tener acceso al resultado devuelto por nombre de columna, la consulta debe incluir una cláusula AS <nombre de alias> para proporcionar un nombre de columna. La instrucción SELECT COUNT (*)AS CountOfProduct FROM Production.Product proporciona la columna CountOfProduct. Luego puede tener acceso al resultado devuelto utilizando el nombre de la columna CountOfProduct o la posición ordinal 0.

Si el tipo de conjunto de resultados es Conjunto de resultados completo o XML, debe usar 0 como nombre del conjunto de resultados.

Cuando se asigna una variable a un conjunto de resultados con el tipo de conjunto de resultados Fila única, la variable debe tener un tipo de datos que sea compatible con el tipo de datos de la columna contenida en el conjunto de resultados. Por ejemplo, un conjunto de resultados que contiene una columna con un tipo de datos String no se puede asignar a una variable con un tipo de datos numérico. Un conjunto de resultados XML solamente se puede asignar a una variable con el tipo de datos String o Object. Si la variable tiene el tipo de datos String, la tarea Ejecutar SQL devuelve una cadena y el origen XML puede consumir los datos XML. Si la variable tiene el tipo de datos Object, la tarea Ejecutar SQL devuelve un objeto DOM (modelo de objetos de documento). Un Conjunto de resultados completo se debe asignar a una variable del tipo de datos Object. El resultado devuelto es un objeto de conjunto de filas. Puede escribir tareas personalizadas que naveguen por el objeto de conjunto de filas y tengan acceso a información sobre las columnas y los datos del conjunto de filas.

En la tabla siguiente se resumen los tipos de datos de variables que se pueden asignar a conjuntos de resultados.

Tipo de conjunto de resultados

Tipo de datos de variable

Tipo de objeto

Fila única

Cualquier tipo que sea compatible con la columna de tipo del conjunto de resultados.

No aplicable

Conjunto de resultados completo

Object

Si la tarea usa un administrador de conexiones nativo, incluidos los administradores de conexiones ADO, OLE DB, Excel y ODBC, el objeto devuelto es un Recordset de ADO.

Si la tarea usa un administrador de conexiones administrado, como el administrador de conexiones ADO.NET, el objeto devuelto es un System.Data.DataSet.

XML

String

String

XML

Object

Si la tarea usa un administrador de conexiones nativo, incluidos los administradores de conexiones ADO, OLE DB, Excel y ODBC, el objeto devuelto es un MSXML6.IXMLDOMDocument.

Si la tarea usa un administrador de conexiones administrado, como el administrador de conexiones ADO.NET, el objeto devuelto es un System.Xml.XmlDocument.

La variable puede definirse en el ámbito de la tarea Ejecutar SQL o en el ámbito del paquete. Si la variable tiene ámbito de paquete, el conjunto de resultados estará disponible para otras tareas y otros contenedores del paquete, así como para cualquier paquete ejecutado por la tarea Ejecutar paquete o Ejecutar paquete DTS 2000.

Cuando se asigna una variable a un conjunto de resultados de fila única, los valores que devuelve la instrucción SQL y que todavía no son cadenas se pueden convertir en cadenas. Si esta conversión se produce, o si es una conversión implícita o explícita, dependerá del tipo de administrador de conexiones que se esté usando:

  • Con un administrador de conexiones ADO.NET, la conversión no se produce.

  • Con un administrador de conexiones ADO u ODBC, esta conversión se produce implícitamente.

  • Con un administrador de conexiones OLE DB o Excel, los valores de tipo DBTYPE_NUMERIC, DBTYPE_GUID y DBTYPE_BYTES se convierten en cadenas de forma explícita.

Para obtener información sobre cómo cargar un conjunto de resultados en una variable, vea Cómo asignar conjuntos de resultados a variables en una tarea Ejecutar SQL.

Configurar conjuntos de resultados en el editor de la tarea Ejecutar SQL

Para obtener más información acerca de las propiedades de los conjuntos de resultados que puede establecer en el Diseñador SSIS, haga clic en el tema siguiente:

Para obtener más información acerca de cómo establecer estas propiedades en el Diseñador SSIS, haga clic en el tema siguiente:

Recursos externos

Icono de Integration Services (pequeño) Manténgase al día con Integration Services

Para obtener las descargas, artículos, ejemplos y vídeos más recientes de Microsoft, así como soluciones seleccionadas de la comunidad, visite la página de Integration Services en MSDN o TechNet:

Para recibir notificaciones automáticas de estas actualizaciones, suscríbase a las fuentes RSS disponibles en la página.