Crear procedimientos almacenados compilados de forma nativa

Se aplica a: SQL Server Azure SQL Database Azure SQL Managed Instance

Los procedimientos almacenados compilados de forma nativa no implementan el área expuesta completa de programación y consulta de Transact-SQL. Hay ciertas construcciones de Transact-SQL que no se pueden usar en los procedimientos almacenados compilados de forma nativa. Para obtener más información, vea Características admitidas en los módulos T-SQL compilados de forma nativa.

Las siguientes características de Transact-SQL solo se admiten en procedimientos almacenados compilados de forma nativa:

  • Bloques atomic. Para obtener más información, consulte Atomic Blocks.

  • Restricciones NOT NULL en parámetros y variables. No se pueden asignar valores NULL a los parámetros o variables declarados como NOT NULL. Para obtener más información, vea DECLARE @local_variable (Transact-SQL).

    • CREATE PROCEDURE dbo.myproc (@myVarchar VARCHAR(32) NOT NULL) AS (...)

    • DECLARE @myVarchar VARCHAR(32) NOT NULL = "Hello"; -- Must initialize to a value.

    • SET @myVarchar = NULL; -- Compiles, but fails during run time.

  • Enlace de esquema de los procedimientos almacenados compilados de forma nativa.

Los procedimientos almacenados compilados de forma nativa se crean por medio de CREATE PROCEDURE (Transact-SQL). En el ejemplo siguiente se muestra una tabla optimizada para memoria y un procedimiento almacenado compilado de nativa que se usa para insertar filas en la tabla.

CREATE TABLE [dbo].[T2] (  
  [c1] [int] NOT NULL, 
  [c2] [datetime] NOT NULL,
  [c3] nvarchar(5) NOT NULL, 
  CONSTRAINT [PK_T1] PRIMARY KEY NONCLUSTERED ([c1])  
  ) WITH ( MEMORY_OPTIMIZED = ON , DURABILITY = SCHEMA_AND_DATA )  
GO  
  
CREATE PROCEDURE [dbo].[usp_2] (@c1 int, @c3 nvarchar(5)) 
WITH NATIVE_COMPILATION, SCHEMABINDING  
AS BEGIN ATOMIC WITH  
(  
 TRANSACTION ISOLATION LEVEL = SNAPSHOT, LANGUAGE = N'us_english'  
)  
  DECLARE @c2 datetime = GETDATE();  
  INSERT INTO [dbo].[T2] (c1, c2, c3) values (@c1, @c2, @c3);  
END  
GO  

En el ejemplo de código, NATIVE_COMPILATION indica que este procedimiento almacenado de Transact-SQL es un procedimiento almacenado compilado de forma nativa. Se requieren las siguientes opciones:

Opción Descripción
SCHEMABINDING Un procedimiento almacenado compilado de forma nativa se debe enlazar al esquema de objetos al que hace referencia. Esto significa que no se puede anular las tablas a las que hace referencia el procedimiento. Las tablas a las que se hace referencia en el procedimiento deben incluir el nombre de esquema y no se admiten caracteres comodín () en las consultas (es decir, sin SELECT * from...). SCHEMABINDING solo se admite para los procedimientos almacenados compilados de forma nativa en esta versión de SQL Server.
BEGIN ATOMIC El cuerpo de un procedimiento almacenado compilado de forma nativa debe constar exactamente de un solo bloque atomic. Los bloques atomic garantizan la ejecución atómica del procedimiento almacenado. Si se invoca el procedimiento fuera del contexto de una transacción activa, iniciará una nueva transacción, que se confirma al final del bloque atomic. Los bloques atomic de los procedimientos almacenados compilados de forma nativa tienen dos opciones obligatorias:

TRANSACTION ISOLATION LEVEL. Vea Transaction Isolation Levels for Memory-Optimized Tables (Niveles de aislamiento de transacción para tablas con optimización para memoria) para conocer los niveles de aislamiento admitidos.

LANGUAGE. El lenguaje del procedimiento almacenado se debe establecer en uno de los lenguajes o de alias de lenguaje disponibles.

Consulte también

Procedimientos almacenados compilados de forma nativa