sql >> Database >  >> RDS >> Sqlserver

Een schemagebonden opgeslagen procedure maken in SQL Server

Als je ooit een aan een schema gebonden UDF hebt gemaakt, weet je dat het een kwestie is van WITH SCHEMABINDING toe te voegen. naar jouw definitie. Hetzelfde geldt wanneer u een schemagebonden weergave maakt.

Opgeslagen procedures zijn een beetje anders.

Alleen native gecompileerde opgeslagen procedures kunnen schemagebonden zijn. In feite moeten native gecompileerde opgeslagen procedures moeten schema gebonden zijn. U kunt geen native gecompileerde opgeslagen procedure maken zonder deze aan een schema te binden.

Maar als je een reguliere (niet-eigen gecompileerde) procedure probeert te binden, krijg je een foutmelding.

Voorbeeld van een schemagebonden opgeslagen procedure

Hier is een voorbeeld van het maken van een schemagebonden (eigen gecompileerde) opgeslagen procedure.

PROCEDURE MAKEN dbo.usp_GetCowsByName @cowname varchar(70)MET SCHEMABINDING, NATIVE_COMPILATIONASBEGIN ATOMIC WITH ( TRANSACTIE-ISOLATIENIVEAU =SNAPSHOT, LANGUAGE =N'us_english' ) SELECTEER PhoneId, dGO /pre> 

Ik heb de WITH SCHEMABINDING argument, maar ik heb ook NATIVE_COMPILATION , wat aangeeft dat de procedure native is gecompileerd.

Let ook op de ATOMIC WITH blok. Dit is vereist voor native gecompileerde opgeslagen procedures.

Deze code heeft een schemagebonden opgeslagen procedure gemaakt.

Fout? Controleer deze vereisten

Native gecompileerde opgeslagen procedures vereisen dat alle onderliggende tabellen voor het geheugen geoptimaliseerde tabellen zijn.

Om voor geheugen geoptimaliseerde tabellen te maken, moet u eerst een voor geheugen geoptimaliseerde bestandsgroep maken.

Dit is de code die ik heb gebruikt om de voor geheugen geoptimaliseerde bestandsgroep, het bijbehorende bestand en de voor geheugen geoptimaliseerde tabel te maken waarnaar ik verwijs in de opgeslagen procedure:

[pre>ALTER DATABASE Test ADD FILEGROUP imoltp_test BEVAT MEMORY_OPTIMIZED_DATA;GOALTER DATABASE Test ADD FILE (name='imoltp_test1', filename='/var/opt/mssql/data/imoltp_test1.mdf') GOALTER DATABASE Test ADD FILE (name='imoltp_test1', filename='/var/opt/mssql/data/imoltp_test1.mdf') GOALTER DATABASE .[Cows]( [CowId] [int] IDENTITY(1,1) NOT NULL PRIMARY KEY NIET-CLUSTERD, [CowName] [varchar](70) NULL, [Phone] [varchar](10) NULL) WITH (MEMORY_OPTIMIZED =ON , DUURZAAMHEID =SCHEMA_AND_DATA)GO

Dus als je mijn code wilt kopiëren en plakken, moet je deze eerst uitvoeren en daarna de bovenstaande opgeslagen procedurecode.

Merk ook op dat ik SQL Server voor Linux gebruik, en dus gebruiken de bestandspaden Linux-conventies. Als u een databasebestand op Windows maakt, moet u dit wijzigen om de Windows-bestandspadconventie te gebruiken (en zorg ervoor dat u een bestandspad gebruikt dat op uw systeem bestaat).


  1. 8 WP-CLI-opdrachten om uw site op te schonen en te optimaliseren

  2. PostgreSQL hoe u kunt zien welke query's zijn uitgevoerd

  3. Verbinding maken met een externe MySQL-server met behulp van PHP

  4. Hoe het aantal rijen te krijgen dat wordt beïnvloed door een instructie wanneer deze zich binnen de trigger van die instructie bevindt?