You are on page 1of 8

XECUTE (Transact-SQL)

Otras versiones

SQL Server 2008 R2 SQL Server 2008 SQL Server 2005

Este tema an no ha recibido ninguna valoracin - Valorar este tema Ejecuta una cadena de comandos o una cadena de caracteres dentro de un lote de Transact-SQL o uno de los siguientes mdulos: procedimiento almacenado del sistema, procedimiento almacenado definido por el usuario, procedimiento almacenado CLR, funcin escalar definida por el usuario o procedimiento almacenado extendido. Nota de seguridad Antes de llamar a EXECUTE con una cadena de caracteres, valide la cadena de caracteres. Nunca ejecute un comando construido desde la entrada de usuario que no se haya validado. SQL Server ampla la instruccin EXECUTE para que se pueda usar para enviar comandos de paso a travs a servidores vinculados. Adicionalmente, el contexto en el que se ejecuta una cadena o un comando se puede establecer de forma explcita. Los metadatos para el conjunto de resultados se pueden definir usando las opciones de WITH RESULT SETS. Convenciones de sintaxis de Transact-SQL Sintaxis Copiar
Execute a stored procedure or function [ { EXEC | EXECUTE } ] { [ @return_status = ] { module_name [ ;number ] | @module_name_var } [ [ @parameter = ] { value | @variable [ OUTPUT ] | [ DEFAULT ] } ] [ ,...n ] [ WITH <execute_option> [ ,...n ] ] }

[;] Execute a character string { EXEC | EXECUTE } ( { @string_variable | [ N ]'tsql_string' } [ + ...n ] ) [ AS { LOGIN | USER } = ' name ' ] [;] Execute a pass-through command against a linked server { EXEC | EXECUTE } ( { @string_variable | [ N ] 'command_string [ ? ]' } [ + ...n ] [ { , { value | @variable [ OUTPUT ] } } [ ...n ] ] ) [ AS { LOGIN | USER } = ' name ' ] [ AT linked_server_name ] [;] <execute_option>::= { RECOMPILE | { RESULT SETS UNDEFINED } | { RESULT SETS NONE } | { RESULT SETS ( <result_sets_definition> [,...n ] ) } } <result_sets_definition> ::= { ( { column_name data_type [ COLLATE collation_name ] [ NULL | NOT NULL ] } [,...n ] ) | AS OBJECT [ db_name . [ schema_name ] . | schema_name . ] {table_name | view_name | table_valued_function_name } | AS TYPE [ schema_name.]table_type_name | AS FOR XML }

Argumentos @return_status Es una variable entera opcional que almacena el estado de retorno de un mdulo. Esta variable debe declararse en el proceso por lotes, en el procedimiento almacenado o en la funcin para que se pueda utilizar en una instruccin EXECUTE. Cuando se utiliza para invocar una funcin escalar definida por el usuario, la variable @return_status puede ser de cualquier tipo de datos escalar. module_name Es el nombre, completo o no, del procedimiento almacenado o la funcin escalar definida por el usuario a la que debe llamar. Los nombres de mdulo deben cumplir las mismas reglas que los identificadores. Los nombres de los

procedimientos almacenados extendidos distinguen siempre entre maysculas y minsculas, sin tener en cuenta la intercalacin del servidor. Un mdulo que se haya creado en otra base de datos se puede ejecutar si el usuario que lo ejecuta es el propietario del mdulo o dispone de los permisos adecuados para ejecutar el mdulo en esa base de datos. Un mdulo puede ejecutarse en otro servidor que est ejecutando SQL Server si el usuario que ejecuta el mdulo tiene los permisos adecuados para utilizar ese servidor (acceso remoto) y para ejecutar el mdulo en dicha base de datos. Si se especifica un nombre de servidor, pero no se especifica nombre de base de datos, Motor de base de datos de SQL Server busca el mdulo en la base de datos predeterminada del usuario. ;number Es un entero opcional que se utiliza para agrupar procedimientos que tengan el mismo nombre. Este parmetro no se utiliza para los procedimientos almacenados extendidos. Nota Esta caracterstica se quitar en una versin futura de Microsoft SQL Server. Evite utilizar esta caracterstica en nuevos trabajos de desarrollo y tenga previsto modificar las aplicaciones que actualmente la utilizan. Para obtener ms informacin acerca de los grupos de procedimientos, vea CREATE PROCEDURE (Transact-SQL). @module_name_var Es el nombre de la variable definida localmente, que representa el nombre de un mdulo. @parameter Es el parmetro de module_name, como se define en el mdulo. Los nombres de parmetro deben precederse del signo (@). Cuando se utiliza con el formato @parameter_name=value, los nombres de parmetro y las constantes no tienen que proporcionarse en el orden en el que se han definido en el mdulo. Sin embargo, si se utiliza el formato @parameter_name=value para cualquier parmetro, se debe usar para todos los parmetros siguientes. De manera predeterminada, los parmetros admiten valores NULL. value Es el valor del parmetro que se va a pasar al mdulo o a un comando de paso a travs. Si no se especifican los nombres de los parmetros, sus valores deben proporcionarse en el orden definido en el mdulo.

Cuando se ejecutan comandos de paso a travs contra servidores vinculados, el orden de los valores de los parmetros depende del proveedor OLE DB del servidor vinculado. La mayora de proveedores OLE DB enlazan valores a parmetros de izquierda a derecha. Si el valor de un parmetro es un nombre de objeto o cadena de caracteres, o est calificado mediante un nombre de base de datos o nombre de esquema, el nombre completo debe escribirse entre comillas simples. Si el valor de un parmetro es una palabra clave, sta debe escribirse entre comillas dobles. Si se define un valor predeterminado en el mdulo, un usuario podr ejecutar el mdulo sin especificar ningn parmetro. El valor predeterminado puede ser tambin NULL. Generalmente, la definicin del mdulo especifica la accin que debe realizarse si el valor del parmetro es NULL. @variable Es la variable que almacena un parmetro o un parmetro devuelto. OUTPUT Especifica que el mdulo o la cadena de comandos devuelve un parmetro. El parmetro coincidente del mdulo o de la cadena de comandos debe haberse creado tambin con la palabra clave OUTPUT. Utilice esta palabra clave cuando use variables de cursor como parmetros. Si value se define como OUTPUT de un mdulo que se ejecuta contra un servidor vinculado, cualquier cambio realizado por el proveedor OLE DB en el @parameter correspondiente se volver a copiar en la variable al final de la ejecucin del mdulo. Si se utilizan parmetros OUTPUT y la intencin es utilizar los valores devueltos en otras instrucciones del lote o mdulo que llama, el valor del parmetro se debe pasar como variable, por ejemplo, @parameter = @variable. No se puede ejecutar un mdulo en el que se especifique OUTPUT para un parmetro que no se ha definido como parmetro OUTPUT en el mdulo. Las constantes no se pueden pasar al mdulo mediante OUTPUT; el parmetro devuelto requiere un nombre de variable. El tipo de datos de la variable debe estar declarado y se le debe haber asignado un valor para poder ejecutar el procedimiento. Cuando se usa EXECUTE contra un procedimiento almacenado remoto, o se ejecuta un comando de paso a travs contra un servidor vinculado, los parmetros OUTPUT no pueden ser ninguno de los tipos de datos de objeto grande (LOB). Los parmetros devueltos pueden ser de cualquier tipo de datos, excepto del tipo de datos LOB.

DEFAULT Proporciona el valor predeterminado del parmetro tal como se define en el mdulo. Cuando el mdulo espera un valor para un parmetro que no tiene un valor predeterminado definido y no se encuentra un parmetro o se ha especificado la palabra clave DEFAULT, se produce un error. @string_variable Es el nombre de una variable local. @string_variable puede ser cualquier tipo de datos char, varchar, nchar o nvarchar. Incluye los tipos de datos (max). [N] 'tsql_string' Es una cadena constante. tsql_string puede ser del tipo de datos nvarchar o varchar. Si se incluye N, la cadena se interpreta como del tipo de datos nvarchar. AS <context_specification> Especifica el contexto en el que se ejecuta la instruccin. LOGIN Especifica que el contexto que se va a suplantar es un inicio de sesin. El mbito de la suplantacin es el servidor. USER Especifica que el contexto de ejecucin que se va a suplantar es un usuario de la base de datos actual. El mbito de la suplantacin se restringe a la base de datos actual. Un cambio de contexto a un usuario de base de datos no hereda los permisos de nivel de servidor de ese usuario. Importante Mientras el cambio de contexto al usuario de base de datos est activo, cualquier intento de acceso a recursos fuera de la base de datos provocar que la instruccin genere errores. Esto incluye instrucciones USE database, consultas distribuidas y consultas que hacen referencia a otra base de datos mediante identificadores de tres o cuatro partes. 'name' Es un nombre vlido de inicio de sesin o de usuario. name debe ser miembro del rol fijo de servidor sysadmin, o existir como entidad de seguridad en sys.database_principals o sys.server_principals, respectivamente. name no puede ser una cuenta integrada, como NT AUTHORITY\LocalService, NT AUTHORITY\NetworkService o NT AUTHORITY\LocalSystem.

Para obtener ms informacin, vea Especificar un nombre de inicio de sesin o usuario ms adelante en este tema. [N] 'command_string' Es una cadena constante que contiene el comando que se va a pasar a travs al servidor vinculado. Si se incluye N, la cadena se interpreta como del tipo de datos nvarchar. [?] Indica los parmetros, para los que se suministran valores en <arg-list> de comandos de paso a travs que se utilizan en una instruccin EXEC('', <arglist>) AT <linkedsrv>. AT linked_server_name Especifica que command_string se ejecuta en linked_server_name y los resultados, si hay alguno, se devuelven al cliente. linked_server_name debe hacer referencia a una definicin de servidor vinculado existente en el servidor local. Los servidores vinculados se definen mediante sp_addlinkedserver. WITH <execute_option> Opciones de ejecucin posibles. Las opciones de RESULT SETS no se pueden especificar en una instruccin INSERT EXEC. Trmino Definicin Fuerza que se compile, use y descarte un nuevo plan despus de ejecutar el mdulo. Si hay algn plan de consulta existente para el mdulo, este plan permanece en la memoria cach. Utilice esta opcin si el parmetro que est proporcionando es atpico o si los datos han cambiado de forma significativa. Esta opcin no se utiliza para los procedimientos almacenados extendidos. Se recomienda que use esta opcin con cautela, porque es costosa. Nota No puede utilizarse WITH RECOMPILE para llamar a un procedimiento almacenado que utiliza la sintaxis OPENDATASOURCE.La opcin WITH RECOMPILE se omite cuando se especifica un nombre de objeto de cuatro partes. Esta opcin no proporciona ninguna garanta de que se devuelvan los resultados, si hay alguno, y no se proporciona ninguna definicin. La instruccin se

RECOMPILE

RESULT SETS UNDEFINED

ejecuta sin errores si se devuelve algn resultado o si no se devuelve ninguno. RESULT SETS UNDEFINED es el comportamiento predeterminado si no se proporciona una opcin de conjuntos de resultados. Garantiza que la instruccin de ejecucin no devolver RESULT SETS NONE ningn resultado. Si se devuelve algn resultado, se anula el lote. Proporciona una garanta de que el resultado se devolver tal y como se especifique en result_sets_definition. En el caso de instrucciones que devuelvan varios conjuntos de resultados, proporcione <result_sets_definition> varias secciones result_sets_definition. Agregue cada result_sets_definition entre parntesis, separados por comas. Para obtener ms informacin, vea <result_sets_definition> ms adelante en este tema. <result_sets_definition> Describe los conjuntos de resultados devueltos por las instrucciones ejecutadas. Las clusulas de result_sets_definition tienen el significado siguiente Trmino Definicin TrminoDefinicin column_nameLos nombres de cada columna.Si el nmero de columnas es diferente al del conjunto de resultados, se produce un error y se anula el lote.Si el nombre de una columna es diferente al del conjunto de resultados, el nombre de columna devuelto se establecer en el nombre definido. data_typeLos tipos de datos de cada columna.Si los tipos de datos son diferentes, se realiza una conversin implcita al tipo de datos definido.Si la conversin produce un error, se anula el lote COLLATE collation_nameLa intercalacin de cada columna.Si se produce un error de coincidencia de la intercalacin, se intenta una intercalacin implcita.Si se produce un error, se anula el lote. NULL | NOT NULLLa nulabilidad de cada columna.Si la nulabilidad definida es NOT NULL y los datos devueltos contienen valores NULL, se produce un error y se anula el lote.Si no se especifica, el valor predeterminado es conforme al valor de las opciones ANSI_NULL_DFLT_ON y ANSI_NULL_DFLT_OFF.

{ column_name data_type [ COLLATE collation_name] [NULL | NOT NULL] }

El nombre de la base de datos que contiene la tabla, vista o funcin con valores de tabla. El nombre del esquema propietario de la schema_name tabla, vista o funcin con valores de tabla. Especifica que las columnas devueltas sern aquellas especificadas en la tabla, vista o table_name | view_name | funcin con valores de tabla con nombre. Las table_valued_function_name variables de tabla, tablas temporales y sinnimos no se admiten en la sintaxis de objeto AS. AS TYPE Especifica que las columnas devueltas sern [schema_name.]table_type_name aquellas especificadas en el tipo de tabla. Especifica que el resultado devuelto ser el AS FOR XML generado por una instruccin SELECT FOR XML (sin la directiva TYPE). db_name El conjunto de resultados real devuelto durante la ejecucin puede ser diferente del definido mediante la clusula WITH RESULT SETS de una de las formas siguientes: nmero de conjuntos de resultados, nmero de columnas, nombre de columna, nulabilidad y tipo de datos. Si el nmero de conjuntos de resultados es diferente, se produce un error y se anula el lote.

You might also like