Compartir a través de


Tarea Ejecutar SQL

La tarea Ejecutar SQL ejecuta instrucciones SQL o procedimientos almacenados de un paquete. La tarea puede contener una sola instrucción SQL o múltiples instrucciones SQL que se ejecutarán de forma secuencial. Puede usar la tarea Ejecutar SQL para los siguientes fines:

  • Truncar una tabla o vista en preparación para insertar datos.

  • Crear, modificar y quitar objetos de base de datos, como tablas y vistas.

  • Volver a crear tablas de hechos y tablas de dimensiones antes de cargar datos en ellas.

  • Ejecutar procedimientos almacenados. Si la instrucción SQL invoca un procedimiento almacenado que devuelve resultados de una tabla temporal, use la opción WITH RESULT SETS para definir los metadatos del conjunto de resultados.

  • Guardar en una variable el conjunto de filas devuelto por una consulta.

La tarea Ejecutar SQL puede usarse en combinación con los contenedores de bucles Foreach y For para ejecutar varias instrucciones SQL. Estos contenedores implementan flujos de control que se repiten en un paquete y pueden ejecutar repetidamente la tarea Ejecutar SQL. Por ejemplo, un paquete puede usar el contenedor de bucles Foreach para enumerar los archivos de una carpeta y ejecutar una tarea Ejecutar SQL repetidamente con el fin de ejecutar la instrucción SQL almacenada en cada archivo.

Conectar con un origen de datos

La tarea Ejecutar SQL puede usar distintos tipos de administradores de conexión para conectar con el origen de datos en el que se ejecuta la instrucción SQL o el procedimiento almacenado. La tarea puede usar los tipos de conexión mostrados en la tabla siguiente.

Tipo de conexión

Administrador de conexiones

EXCEL

Administrador de conexiones con Excel

OLE DB

Administrador de conexiones OLE DB

ODBC

Administrador de conexiones ODBC

ADO

Administrador de conexiones ADO

ADO.NET

Administrador de conexiones ADO.NET

SQLMOBILE

Administrador de conexiones con SQL Server Compact Edition

Crear instrucciones SQL

El origen de las instrucciones SQL usadas por esta tarea puede ser una propiedad de tarea que contiene una instrucción, una conexión con un archivo que contiene una o varias instrucciones, o el nombre de una variable que contiene una instrucción. Debe escribirlas en el dialecto del sistema de administración de bases de datos (DBMS) de origen. Para obtener más información, vea Consultas de Integration Services (SSIS).

Si las instrucciones SQL se almacenan en un archivo, la tarea utiliza un administrador de conexiones de archivos para conectar con el archivo. Para obtener más información, vea Administrador de conexiones de archivos.

En el Diseñador SSIS, puede utilizar el cuadro de diálogo Editor de la tarea Ejecutar SQL para escribir instrucciones SQL, o utilizar el Generador de consultas, una interfaz gráfica de usuario para crear consultas SQL. Para obtener más información, vea Editor de la tarea Ejecutar SQL (página General) y Generador de consultas.

[!NOTA]

Es posible que la tarea Ejecutar SQL no pueda analizar correctamente instrucciones SQL válidas escritas fuera de dicha tarea.

[!NOTA]

La tarea Ejecutar SQL usa el valor de enumeración de ParseMode RecognizeAll. Para obtener más información, vea Espacio de nombres ManagedBatchParser.

Enviar varias instrucciones en un lote

Si incluye varias instrucciones en una tarea Ejecutar SQL, puede agruparlas y ejecutarlas como un lote. Para indicar el final de un lote, utilice el comando GO. Todas las instrucciones SQL entre dos comandos GO se envían en un lote al proveedor OLE DB para que se ejecuten. El comando SQL puede incluir varios lotes separados por comandos GO.

Hay restricciones respecto a los tipos de instrucciones SQL que se pueden agrupar en un lote. Para obtener más información, vea Lotes de instrucciones.

Si la tarea Ejecutar SQL ejecuta un lote de instrucciones SQL, se aplicarán las reglas siguientes al lote:

  • Solo una instrucción puede devolver un conjunto de resultados y debe ser la primera instrucción del lote.

  • Si el conjunto de resultados usa enlaces de resultados, las consultas deben devolver el mismo número de columnas. Si las consultas devuelven un número distinto de columnas, la tarea no se completará correctamente. Sin embargo, aunque la tarea no se complete correctamente, se completarán correctamente las consultas que ejecute, como DELETE o INSERT.

  • Si los enlaces de resultados usan nombres de columna, la consulta debe devolver columnas que tengan los mismos nombres que los nombres de los conjuntos de resultados que se utilizan en la tarea. Si faltan columnas, la tarea no se completa correctamente.

  • Si la tarea utiliza enlace de parámetros, todas las consultas del lote deberán tener el mismo número de parámetros y estos deberán ser del mismo tipo.

Ejecutar comandos SQL con parámetros

Las instrucciones SQL y los procedimientos almacenados suelen usar parámetros de entrada, parámetros de salida y códigos de retorno. La tarea Ejecutar SQL admite los tipos de parámetros Input, Output y ReturnValue. Utilice el tipo Input para parámetros de entrada, Output para parámetros de salida y ReturnValue para códigos de retorno.

[!NOTA]

Solo puede usar parámetros en una tarea Ejecutar SQL si el proveedor de datos los admite.

Para obtener información sobre cómo utilizar parámetros y códigos de retorno en la tarea Ejecutar SQL, vea Parámetros y códigos de retorno en la tarea Ejecutar SQL.

Especificar un tipo de conjunto de resultados

En función del tipo de comando SQL, la tarea Ejecutar SQL puede devolver o no un conjunto de resultados. Por ejemplo, una instrucción SELECT suele devolver un conjunto de resultados; en cambio, una instrucción INSERT no lo devuelve. El conjunto de resultados de una instrucción SELECT puede contener cero filas, una fila o muchas filas. Los procedimientos almacenados también pueden devolver un valor entero, denominado código de retorno, que indica el estado de ejecución del procedimiento. En tal caso, el conjunto de resultados constará de una fila individual.

Para obtener información sobre cómo recuperar conjuntos de resultados de comandos SQL en la tarea Ejecutar SQL, vea Conjuntos de resultados en la tarea Ejecutar SQL.

Solucionar problemas de la tarea Ejecutar SQL

Puede registrar las llamadas que realiza la tarea Ejecutar SQL a proveedores de datos externos. Puede usar esta capacidad de registro para solucionar problemas relacionados con los comandos SQL que ejecuta la tarea Ejecutar SQL. Para registrar las llamadas realizadas por la tarea Ejecutar SQL a proveedores de datos externos, habilite el registro de paquetes y seleccione el evento Diagnostic en el nivel de paquete. Para obtener más información, vea Herramientas para solucionar problemas con la ejecución de paquetes.

A veces, un procedimiento almacenado o comando SQL devuelve varios conjuntos de resultados. Estos conjuntos de resultados no solo incluyen los conjuntos de filas resultantes de consultas SELECT, sino valores únicos generados por errores de las instrucciones RAISERROR o PRINT. El hecho de que la tarea omita errores en los conjuntos de resultados que se producen después del primer conjunto de resultados depende del tipo de administrador de conexiones que se use:

  • Si utiliza los administradores de conexiones ADO y OLE DB, la tarea omite los conjuntos de resultados que se producen después del primer conjunto de resultados. Por consiguiente, con estos administradores de conexiones la tarea omite un error devuelto por un procedimiento almacenado o comando SQL cuando el error no forma parte del primer conjunto de resultados.

  • Si utiliza los administradores de conexiones ODBC y ADO.NET, la tarea no omite los conjuntos de resultados que se producen después del primer conjunto de resultados. Con estos administradores de conexiones, la tarea producirá un error cuando un conjunto de resultados distinto del primer conjunto de resultados contenga un error.

Entradas del registro personalizadas

La siguiente tabla contiene la entrada del registro personalizada para la tarea Ejecutar SQL. Para obtener más información, vea Registro de Integration Services (SSIS) y Mensajes personalizados para registro.

Entrada del registro

Descripción

ExecuteSQLExecutingQuery

Proporciona información sobre las fases de ejecución de la instrucción SQL. Las entradas de registro se escriben cuando la tarea adquiere una conexión con la base de datos, cuando la tarea comienza a preparar la instrucción SQL y una vez que se completa la ejecución de la instrucción SQL. La entrada del registro para la fase de preparación incluye la instrucción SQL que utiliza la tarea.

Configurar la tarea Ejecutar SQL

Puede configurar la tarea Ejecutar SQL de las maneras siguientes:

  • Especificar el tipo de administrador de conexiones que se va a utilizar para conectar con una base de datos.

  • Especificar el tipo de conjunto de resultados que devolverá la instrucción SQL.

  • Especificar un tiempo de espera para las instrucciones SQL.

  • Especificar el origen de la instrucción SQL.

  • Indicar si la tarea omite la fase de preparación para la instrucción SQL.

  • Si utiliza el tipo de conexión ADO, debe indicar si la instrucción SQL es un procedimiento almacenado. Para otros tipos de conexión, esta propiedad es de solo lectura y su valor siempre es false.

Puede establecer propiedades mediante programación o a través del Diseñador SSIS.

Para obtener más información acerca de las propiedades que puede establecer en el Diseñador SSIS, haga clic en uno de los temas siguientes:

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

Configurar la tarea Ejecutar SQL mediante programación

Para obtener más información sobre cómo establecer estas propiedades mediante programación, haga clic en el tema siguiente:

Tareas relacionadas

Contenido relacionado

Icono de Integration Services (pequeño) Mantenerse al día con Integration Services

Para obtener las descargas, los artículos, los ejemplos y los vídeos más recientes de Microsoft, así como una selección de soluciones de la comunidad, visite la página de Integration Services en MSDN:


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