sql >> Database teknologi >  >> RDS >> Sqlserver

Sådan opretter du en Schema Bound Stored Procedure i SQL Server

Hvis du nogensinde har oprettet en skemabundet UDF, ved du, at skemabinding er bare et spørgsmål om at tilføje WITH SCHEMABINDING til din definition. Det samme gælder, når du opretter en skemabundet visning.

Lagrede procedurer er lidt anderledes.

Kun oprindeligt kompilerede lagrede procedurer kan skemabundes. Faktisk skal native kompilerede lagrede procedurer være skemabundet. Du kan ikke oprette en indbygget kompileret lagret procedure uden at skema binder den.

Men hvis du forsøger at skemabinde en almindelig (ikke-native kompileret) procedure, får du en fejl.

Eksempel på en skemabundet lagret procedure

Her er et eksempel på oprettelse af en skemabundet (native kompileret) lagret procedure.

OPRET PROCEDURE dbo.usp_GetCowsByName @cowname varchar(70)WITH SCHEMABINDING, NATIVE_COMPILATIONASBEGIN ATOMIC WITH ( TRANSAKTIONSISOLATIONSNIVEAU =SNAPSHOT, LANGUAGE =N'us_english' ) CoROMFælg CowNavn, CowHEREId, CoromFVælg CowNavn,CowNavn. /pre> 

Jeg har inkluderet WITH SCHEMABINDING argument, men jeg har også inkluderet NATIVE_COMPILATION , hvilket indikerer, at proceduren er indbygget kompileret.

Bemærk også ATOMIC WITH blok. Dette er påkrævet for oprindeligt kompilerede lagrede procedurer.

Denne kode oprettede en skemabundet lagret procedure.

Fejl? Tjek disse forudsætninger

Native kompilerede lagrede procedurer kræver, at alle underliggende tabeller er hukommelsesoptimerede tabeller.

For at oprette hukommelsesoptimerede tabeller skal du først oprette en hukommelsesoptimeret filgruppe.

Her er koden, jeg brugte til at oprette den hukommelsesoptimerede filgruppe, dens tilknyttede fil og den hukommelsesoptimerede tabel, som jeg refererer til i den lagrede procedure:

ALTER DATABASE Test TILFØJ FILGROUP imoltp_test INDEHOLDER MEMORY_OPTIMIZED_DATA;GOALTER DATABASE Test TILFØJ FIL (name='imoltp_test1', filename='/var/opt/mssql/data/imoltp_test1.mdf_test] TIL GOtFICLE TOPLEGROUP] imol. .[Køer]( [CowId] [int] IDENTITET(1,1) IKKE NULL PRIMÆR NØGLE IKKE KLUSTERET, [Konavn] [varchar](70) NULL, [Telefon] [varchar](10) NULL) MED (MEMORY_OPTIMIZED =ON , DURABILITY =SCHEMA_AND_DATA)GO

Så hvis du vil kopiere og indsætte min kode, skal du køre denne først og derefter den lagrede procedurekode ovenfor.

Bemærk også, at jeg bruger SQL Server til Linux, så filstierne bruger Linux-konventioner. Hvis du opretter en databasefil på Windows, skal du ændre den for at bruge Windows-filstikonventionen (og sørg for at bruge en filsti, der findes på dit system).


  1. Sådan får du gårsdagens dato i MySQL

  2. SQLite - Slip en tabel

  3. Understøttelse af flere sprog i 11i/R12

  4. Hvordan finder man de privilegier og roller, der er tildelt en bruger i Oracle?