Jika Anda pernah membuat skema terikat UDF, Anda akan tahu bahwa pengikatan skema itu hanya masalah menambahkan WITH SCHEMABINDING
untuk definisi Anda. Hal yang sama berlaku saat Anda membuat tampilan terikat skema.
Prosedur tersimpan sedikit berbeda.
Hanya prosedur tersimpan yang dikompilasi secara asli yang dapat terikat skema. Faktanya, prosedur tersimpan yang dikompilasi secara asli harus terikat skema. Anda tidak dapat membuat prosedur tersimpan yang dikompilasi secara native tanpa skema yang mengikatnya.
Tetapi jika Anda mencoba untuk mengikat skema prosedur reguler (tidak dikompilasi secara asli), Anda akan mendapatkan kesalahan.
Contoh Schema Bound Stored Procedure
Berikut ini contoh pembuatan prosedur tersimpan yang terikat skema (dikompilasi secara native).
BUAT PROSEDUR dbo.usp_GetCowsByName @cowname varchar(70)DENGAN SCHEMABINDING, NATIVE_COMPILATIONASBEGIN ATOMIC WITH ( TRANSACTION ISOLATION LEVEL =SNAPSHOT, LANGUAGE =N'us_english' ) SELECT CowId; SELECT CowId; /pra>Saya telah menyertakan
WITH SCHEMABINDING
argumen, tetapi saya juga menyertakanNATIVE_COMPILATION
, yang menunjukkan bahwa prosedur dikompilasi secara asli.Perhatikan juga
ATOMIC WITH
memblokir. Ini diperlukan untuk prosedur tersimpan yang dikompilasi secara asli.Kode ini membuat prosedur tersimpan terikat skema.
Kesalahan? Periksa Prasyarat ini
Prosedur tersimpan yang dikompilasi secara native mengharuskan tabel yang mendasarinya adalah tabel yang dioptimalkan memori.
Untuk membuat tabel dengan memori yang dioptimalkan, Anda harus terlebih dahulu membuat filegroup dengan memori yang dioptimalkan.
Berikut kode yang saya gunakan untuk membuat filegroup dengan memori yang dioptimalkan, file terkaitnya, dan tabel dengan memori yang dioptimalkan yang saya rujuk dalam prosedur tersimpan:
Uji DATABASE ALTER ADD FILEGROUP imoltp_test CONTAINS MEMORY_OPTIMIZED_DATA;GOALTER DATABASE Tes TAMBAHKAN FILE (name='imoltp_test1', filename='/var/opt/mssql/data/imoltp_test1.mdf') TO FILEGROUP .[Cows]( [CowId] [int] IDENTITY(1,1) NOT NULL PRIMARY KEY NONCLUSTERED, [CowName] [varchar](70) NULL, [Phone] [varchar](10) NULL) WITH (MEMORY_OPTIMIZED =ON , DURABILITY =SCHEMA_AND_DATA)GOJadi jika Anda ingin menyalin dan menempelkan kode saya, Anda harus menjalankan ini terlebih dahulu, lalu kode prosedur tersimpan di atas.
Perhatikan juga bahwa saya menggunakan SQL Server untuk Linux, sehingga jalur file menggunakan konvensi Linux. Jika Anda membuat file database di Windows, Anda harus mengubahnya untuk menggunakan konvensi jalur file Windows (dan pastikan untuk menggunakan jalur file yang ada di sistem Anda).