Membuat Prosedur Tersimpan yang Dikompilasi Secara Asli

Berlaku untuk:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

Prosedur tersimpan yang dikompilasi secara asli tidak menerapkan pemrograman Transact-SQL lengkap dan area permukaan kueri. Ada konstruksi Transact-SQL tertentu yang tidak dapat digunakan di dalam prosedur tersimpan yang dikompilasi secara asli. Untuk informasi selengkapnya, lihat Fitur yang Didukung untuk Modul T-SQL yang Dikompilasi Secara Asli.

Fitur Transact-SQL berikut ini hanya didukung untuk prosedur tersimpan yang dikompilasi secara asli:

  • Blok atomik. Untuk informasi selengkapnya, lihat Blok Atomik.

  • NOT NULL batasan pada parameter dan variabel. Anda tidak dapat menetapkan nilai NULL ke parameter atau variabel yang dideklarasikan sebagai NOT NULL. Untuk informasi selengkapnya, lihat 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.

  • Pengikatan skema prosedur tersimpan yang dikompilasi secara asli.

Prosedur tersimpan yang dikompilasi secara asli dibuat menggunakan CREATE PROCEDURE (Transact-SQL). Contoh berikut menunjukkan tabel yang dioptimalkan memori dan prosedur tersimpan yang dikompilasi secara asli yang digunakan untuk menyisipkan baris ke dalam tabel.

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  

Dalam sampel kode, NATIVE_COMPILATION menunjukkan bahwa prosedur tersimpan Transact-SQL ini adalah prosedur tersimpan yang dikompilasi secara asli. Opsi berikut diperlukan:

Opsi Deskripsi
SCHEMABINDING Prosedur tersimpan yang dikompilasi secara asli harus terikat dengan skema objek yang dirujuknya. Ini berarti bahwa tabel yang dirujuk oleh prosedur tidak dapat dihilangkan. Tabel yang direferensikan dalam prosedur harus menyertakan nama skemanya, dan kartubebas (*) tidak diizinkan dalam kueri (artinya tidak ).SELECT * from... SCHEMABINDING hanya didukung untuk prosedur tersimpan yang dikompilasi secara asli dalam versi SQL Server ini.
MULAI ATOM Isi prosedur tersimpan yang dikompilasi secara asli harus terdiri dari satu blok atom. Blok atom menjamin eksekusi atom prosedur tersimpan. Jika prosedur dipanggil di luar konteks transaksi aktif, prosedur akan memulai transaksi baru, yang berkomitmen di akhir blok atom. Blok atom dalam prosedur tersimpan yang dikompilasi secara asli memiliki dua opsi yang diperlukan:

TINGKAT ISOLASI TRANSAKSI. Lihat Tingkat Isolasi Transaksi untuk Tabel yang Dioptimalkan Memori untuk tingkat isolasi yang didukung.

BAHASA. Bahasa untuk prosedur tersimpan harus diatur ke salah satu bahasa atau alias bahasa yang tersedia.

Lihat Juga

Prosedur Tersimpan yang Dikompilasi Secara Asli