OR ALTER
Se aplica a : Azure SQL Database, SQL Server (a partir de SQL Server 2016 (13.x) SP1).
Altera el procedimiento si ya existe.
schema_name
El nombre del esquema al que pertenece el procedimiento. Los procedimientos están vinculados al esquema. Si no se especifica un nombre de esquema cuando se crea el procedimiento, se asigna automáticamente el esquema predeterminado del usuario que está creando el procedimiento.
procedure_name
El nombre del procedimiento. Los nombres de los procedimientos deben cumplir con las reglas de los identificadores y deben ser únicos dentro del esquema.
Se pueden crear procedimientos temporales locales o globales utilizando un signo de número (#) antes de nombre_procedimiento ( #nombre_procedimiento ) para procedimientos temporales locales y dos signos de número para procedimientos temporales globales ( ##nombre_procedimiento ). Un procedimiento temporal local solo es visible para la conexión que lo creó y se descarta cuando se cierra esa conexión. Un procedimiento temporal global está disponible para todas las conexiones y se elimina al final de la última sesión que utiliza el procedimiento. No se pueden especificar nombres temporales para procedimientos CLR.
El nombre completo de un procedimiento o un procedimiento temporal global, incluido ##, no puede superar los 128 caracteres. El nombre completo de un procedimiento temporal local, incluido #, no puede superar los 116 caracteres.
;number
Se aplica a : SQL Server 2008 y posterior y Azure SQL Database.
Un entero opcional que se utiliza para agrupar procedimientos del mismo nombre. Estos procedimientos agrupados se pueden colocar juntos mediante una instrucción DROP PROCEDURE.
Los procedimientos numerados no pueden usar los tipos definidos por el usuario xml o CLR y no se pueden usar en una guía de planes.
@parameter_name
Un parámetro declarado en el procedimiento. Especifique un nombre de parámetro utilizando el signo de arroba ( @ ) como primer carácter. El nombre del parámetro debe cumplir con las reglas para los identificadores . Los parámetros son locales para el procedimiento; los mismos nombres de parámetros se pueden utilizar en otros procedimientos.
Se pueden declarar uno o más parámetros; el máximo es 2.100. El usuario debe proporcionar el valor de cada parámetro declarado cuando se llama al procedimiento, a menos que se defina un valor predeterminado para el parámetro o que el valor se establezca para que sea igual a otro parámetro. Si un procedimiento contiene parámetros con valores de tabla y falta el parámetro en la llamada, se pasa una tabla vacía. Los parámetros solo pueden tomar el lugar de expresiones constantes; no se pueden usar en lugar de nombres de tablas, nombres de columnas o los nombres de otros objetos de la base de datos. Para obtener más información, consulte EJECUTAR (Transact-SQL) .
Los parámetros no se pueden declarar si se especifica FOR REPLICATION.
[type_schema_name.]data_type
El tipo de datos del parámetro y el esquema al que pertenece el tipo de datos.
Directrices para los procedimientos de Transact-SQL :
Todos los tipos de datos de Transact-SQL se pueden utilizar como parámetros.
Puede utilizar el tipo de tabla definida por el usuario para crear parámetros con valores de tabla. Los parámetros con valores de tabla solo pueden ser parámetros INPUT y deben ir acompañados de la palabra clave READONLY. Para obtener más información, consulte Usar parámetros con valores de tabla (motor de base de datos)
los tipos de datos de cursor solo pueden ser parámetros de SALIDA y deben ir acompañados de la palabra clave VARYING.
Directrices para los procedimientos CLR :
Todos los tipos de datos nativos de SQL Server que tienen un equivalente en el código administrado se pueden usar como parámetros. Para obtener más información sobre la correspondencia entre los tipos de CLR y los tipos de datos del sistema de SQL Server, consulte Asignación de datos de parámetros de CLR . Para obtener más información sobre los tipos de datos del sistema de SQL Server y su sintaxis, consulte Tipos de datos (Transact-SQL) .
Los tipos de datos con valores de tabla o de cursor no se pueden utilizar como parámetros.
Si el tipo de datos del parámetro es un tipo definido por el usuario de CLR, debe tener permiso EXECUTE en el tipo.
VARYING
Especifica el conjunto de resultados admitido como parámetro de salida. Este parámetro es construido dinámicamente por el procedimiento y su contenido puede variar. Se aplica solo a los parámetros del cursor . Esta opción no es válida para procedimientos CLR.
default
Un valor predeterminado para un parámetro. Si se define un valor predeterminado para un parámetro, el procedimiento se puede ejecutar sin especificar un valor para ese parámetro. El valor predeterminado debe ser una constante o puede ser NULL. El valor constante puede tener la forma de un comodín, lo que permite utilizar la palabra clave LIKE al pasar el parámetro al procedimiento.
Los valores predeterminados se registran en la sys.parameters.defaultcolumna solo para los procedimientos CLR. Esa columna es NULL para los parámetros del procedimiento Transact-SQL.
OUT|OUTPUT
Indica que el parámetro es un parámetro de salida. Utilice los parámetros de SALIDA para devolver valores a la persona que llama al procedimiento. Los parámetros text , ntext e image no se pueden usar como parámetros de SALIDA, a menos que el procedimiento sea un procedimiento CLR. Un parámetro de salida puede ser un marcador de posición de cursor, a menos que el procedimiento sea un procedimiento CLR. Un tipo de datos de valor de tabla no se puede especificar como un parámetro de SALIDA de un procedimiento.
READONLY
Indica que el parámetro no se puede actualizar ni modificar dentro del cuerpo del procedimiento. Si el tipo de parámetro es un tipo de valor de tabla, se debe especificar READONLY.
RECOMPILE
Indica que Motor de base de datos no almacena en caché un plan de consulta para este procedimiento, lo que obliga a compilarlo cada vez que se ejecuta. Para obtener más información sobre los motivos para forzar una recompilación, consulte Recompilar un procedimiento almacenado . Esta opción no se puede utilizar cuando se especifica FOR REPLICATION o para procedimientos CLR.
Para indicar al Motor de base de datos que descarte los planes de consulta para consultas individuales dentro de un procedimiento, use la sugerencia de consulta RECOMPILE en la definición de la consulta. Para obtener más información, consulte Sugerencias de consulta (Transact-SQL) .
ENCRYPTION
Se aplica a : SQL Server (SQL Server 2008 y posterior), Azure SQL Database.
Indica que SQL Server convierte el texto original de la instrucción CREATE PROCEDURE a un formato ofuscado. El resultado de la ofuscación no es directamente visible en ninguna de las vistas de catálogo en SQL Server. Los usuarios que no tienen acceso a las tablas del sistema ni a los archivos de la base de datos no pueden recuperar el texto ofuscado. Sin embargo, el texto está disponible para usuarios privilegiados que pueden acceder a las tablas del sistema a través del puerto DAC o acceder directamente a los archivos de la base de datos. Además, los usuarios que pueden adjuntar un depurador al proceso del servidor pueden recuperar el procedimiento descifrado de la memoria en tiempo de ejecución. Para obtener más información sobre cómo acceder a los metadatos del sistema, consulte Configuración de visibilidad de metadatos .
Esta opción no es válida para procedimientos CLR.
Los procedimientos creados con esta opción no se pueden publicar como parte de la replicación de SQL Server.
Cláusula EXECUTE AS
Especifica el contexto de seguridad en el que ejecutar el procedimiento.
Para los procedimientos almacenados compilados de forma nativa, a partir de SQL Server 2016 (13.x) y en Azure SQL Database, no hay limitaciones en la cláusula EXECUTE AS. En SQL Server 2014 (12.x), las cláusulas SELF, OWNER y 'user_name' se admiten con procedimientos almacenados compilados de forma nativa.
Para obtener más información, consulte Cláusula EXECUTE AS (Transact-SQL) .
FOR REPLICATION
Se aplica a : SQL Server (SQL Server 2008 y posterior), Azure SQL Database.
Especifica que el procedimiento se crea para la replicación. En consecuencia, no puede ejecutarse en el Suscriptor. Un procedimiento creado con la opción FOR REPLICATION se utiliza como filtro de procedimiento y se ejecuta solo durante la replicación. Los parámetros no se pueden declarar si se especifica FOR REPLICATION. FOR REPLICATION no se puede especificar para procedimientos CLR. La opción RECOMPILE se ignora para los procedimientos creados con FOR REPLICATION.
Un FOR REPLICATIONprocedimiento tiene un tipo de objeto RF en sys.objectsy sys.procedures.
{[BEGIN]sql_statement[;][...n][END]}
Una o más instrucciones Transact-SQL que componen el cuerpo del procedimiento. Puede utilizar las palabras clave BEGIN y END opcionales para incluir las declaraciones. Para obtener información, consulte las secciones Mejores prácticas, Observaciones generales y Limitaciones y restricciones que siguen.
EXTERNAL NAME assembly_name.class_name.method_name
Se aplica a : SQL Server 2008 y posterior, Base de datos SQL.
Especifica el método de un ensamblado de .NET Framework para que haga referencia un procedimiento CLR. class_name debe ser un identificador de SQL Server válido y debe existir como una clase en el ensamblado. Si la clase tiene un nombre calificado para el espacio de nombres que usa un punto ( . ) para separar las partes del espacio de nombres, el nombre de la clase se debe delimitar con corchetes ( [] ) o comillas ( "" ). El método especificado debe ser un método estático de la clase.
De forma predeterminada, SQL Server no puede ejecutar código CLR. Puede crear, modificar y descartar objetos de base de datos que hagan referencia a módulos de Common Language Runtime; sin embargo, no puede ejecutar estas referencias en SQL Server hasta que habilite la opción clr enable . Para habilitar la opción, use sp_configure .
ATOMIC WITH
Se aplica a : SQL Server 2014 (12.x) y posterior y Azure SQL Database.
Indica la ejecución del procedimiento almacenado atómico. Los cambios se confirman o se revierten todos los cambios lanzando una excepción. El bloque ATOMIC WITH es necesario para los procedimientos almacenados compilados de forma nativa.
Si el procedimiento DEVUELVE (explícitamente a través de la declaración RETURN o implícitamente al completar la ejecución), se confirma el trabajo realizado por el procedimiento. Si el procedimiento TIRO, el trabajo realizado por el procedimiento se retrotrae.
XACT_ABORT está activado de forma predeterminada dentro de un bloque atómico y no se puede cambiar. XACT_ABORT especifica si SQL Server revierte automáticamente la transacción actual cuando una instrucción Transact-SQL genera un error en tiempo de ejecución.
Las siguientes opciones SET siempre están ACTIVADAS en el bloque ATOMIC; las opciones no se pueden cambiar.
CONCAT_NULL_YIELDS_NULL
IDENTIFICADOR_COTIZADO, ARITHABORT
NO CUENTA
ANSI_NULLS
ANSI_ADVERTENCIAS
Las opciones SET no se pueden cambiar dentro de los bloques ATOMIC. Las opciones SET en la sesión de usuario no se utilizan en el ámbito de los procedimientos almacenados compilados de forma nativa. Estas opciones se corrigen en tiempo de compilación.
Las operaciones BEGIN, ROLLBACK y COMMIT no se pueden utilizar dentro de un bloque atómico.
Hay un bloque ATOMIC por procedimiento almacenado compilado de forma nativa, en el ámbito externo del procedimiento. Los bloques no se pueden anidar. Para obtener más información acerca de los bloques atómicos, consulte Procedimientos almacenados compilados de forma nativa .
NULL|NOT NULL
Determina si se permiten valores nulos en un parámetro. NULL es el valor predeterminado.
NATIVE_COMPILATION
Se aplica a : SQL Server 2014 (12.x) y posterior y Azure SQL Database.
Indica que el procedimiento se compila de forma nativa. NATIVE_COMPILATION, SCHEMABINDING y EXECUTE AS se pueden especificar en cualquier orden. Para obtener más información, consulte Procedimientos almacenados compilados de forma nativa .
SCHEMABINDING
Se aplica a : SQL Server 2014 (12.x) y posterior y Azure SQL Database.
Garantiza que las tablas a las que hace referencia un procedimiento no se pueden descartar ni modificar. SCHEMABINDING es necesario en los procedimientos almacenados compilados de forma nativa. (Para obtener más información, consulte Procedimientos almacenados compilados de forma nativa ). Las restricciones SCHEMABINDING son las mismas que para las funciones definidas por el usuario. Para obtener más información, consulte la sección SCHEMABINDING en CREATE FUNCTION (Transact-SQL) .
LANGUAGE=[N]'language'
Se aplica a : SQL Server 2014 (12.x) y posterior y Azure SQL Database.
Equivalente a la opción de sesión ESTABLECER IDIOMA (Transact-SQL) . IDIOMA = [N] 'idioma' es obligatorio.
NIVEL DE AISLAMIENTO DE TRANSACCIÓN
Se aplica a : SQL Server 2014 (12.x) y posterior y Azure SQL Database.
Requerido para procedimientos almacenados compilados de forma nativa. Especifica el nivel de aislamiento de transacciones para el procedimiento almacenado. Las opciones son las siguientes:
Para obtener más información sobre estas opciones, consulte ESTABLECER NIVEL DE AISLAMIENTO DE TRANSACCIÓN (Transact-SQL) .
REPEATABLE READ
Especifica que las sentencias no pueden leer datos que hayan sido modificados pero aún no confirmados por otras transacciones. Si otra transacción modifica los datos que ha leído la transacción actual, la transacción actual falla.
SERIALIZABLE
Especifica lo siguiente:
Las declaraciones no pueden leer datos que hayan sido modificados pero aún no confirmados por otras transacciones.
Si otra transacción modifica los datos que ha leído la transacción actual, la transacción actual falla.
Si otra transacción inserta nuevas filas con valores clave que estarían dentro del rango de claves leídas por cualquier declaración en la transacción actual, la transacción actual falla.
SNAPSHOT
Especifica que los datos leídos por cualquier declaración en una transacción son la versión transaccionalmente coherente de los datos que existían al comienzo de la transacción.
DATEFIRST = number
Se aplica a : SQL Server 2014 (12.x) y posterior y Azure SQL Database.
Especifica el primer día de la semana en un número del 1 al 7. DATEFIRST es opcional. Si no se especifica, la configuración se deduce del idioma especificado.
Para obtener más información, consulte SET DATEFIRST (Transact-SQL) .
DATEFORMAT = format
Se aplica a : SQL Server 2014 (12.x) y posterior y Azure SQL Database.
Especifica el orden de las partes de fecha de mes, día y año para interpretar las cadenas de caracteres date, smalldatetime, datetime, datetime2 y datetimeoffset. FORMATO DE FECHA es opcional. Si no se especifica, la configuración se deduce del idioma especificado.
Para obtener más información, consulte SET DATEFORMAT (Transact-SQL) .
DELAYED_DURABILITY = { OFF | ON }
Se aplica a : SQL Server 2014 (12.x) y posterior y Azure SQL Database.
Las confirmaciones de transacciones de SQL Server pueden ser totalmente duraderas, predeterminadas o duraderas retrasadas.