esemény
márc. 31. 23 - ápr. 2. 23
A legnagyobb SQL, Fabric és Power BI tanulási esemény. Március 31. – Április 2. A FABINSIDER kóddal 400 dollárt takaríthat meg.
Regisztráljon még maEzt a böngészőt már nem támogatjuk.
Frissítsen a Microsoft Edge-re, hogy kihasználhassa a legújabb funkciókat, a biztonsági frissítéseket és a technikai támogatást.
A következőkre vonatkozik:SQL Server
Ez a cikk áttekintést nyújt az adatbázis-objektumok sql Server-integrációval történő fordításához szükséges névterekről és kódtárakról a .NET-keretrendszer közös nyelvi futtatókörnyezetével (CLR). A cikk azt is bemutatja, hogyan írhat, fordíthat le és futtathat egy kis CLR-ben tárolt, C# és Visual Basic .NET nyelven írt eljárást.
Az alapvető CLR-adatbázis-objektumok fejlesztéséhez szükséges összetevők az SQL Serverrel vannak telepítve. A CLR integrációs funkciói a .NET-keretrendszer részét képező System.Data.dll
nevű szerelvényben lesznek közzétéve. Ez a szerelvény a globális szerelvény-gyorsítótárban (GAC) és a .NET-keretrendszer könyvtárában található. A parancssori eszközök és a Visual Studio általában automatikusan hozzáad egy erre a szerelvényre mutató hivatkozást, így nem kell manuálisan hozzáadni.
A System.Data.dll
szerelvény a következő névtereket tartalmazza, amelyek a CLR-adatbázisobjektumok összeállításához szükségesek:
System.Data
System.Data.Sql
Microsoft.SqlServer.Server
System.Data.SqlTypes
Tipp
A CLR-adatbázisobjektumok Linuxon való betöltése támogatott, de a .NET-keretrendszerrel kell létrehozni őket (az SQL Server CLR-integráció nem támogatja a .NET Core- vagy .NET 5-ös és újabb verziókat). A EXTERNAL_ACCESS
vagy UNSAFE
engedélykészlettel rendelkező CLR-szerelvények linuxos rendszereken sem támogatottak.
Másolja és illessze be a következő C# vagy Visual Basic .NET kódot egy szövegszerkesztőbe, majd mentse egy helloworld.cs
vagy helloworld.vb
nevű fájlba.
using System;
using System.Data;
using Microsoft.SqlServer.Server;
using System.Data.SqlTypes;
public class HelloWorldProc
{
[Microsoft.SqlServer.Server.SqlProcedure]
public static void HelloWorld(out string text)
{
SqlContext.Pipe.Send("Hello world!" + Environment.NewLine);
text = "Hello world!";
}
}
Ez a program egyetlen statikus metódust tartalmaz egy nyilvános osztályon. Ez a metódus két új osztályt használ, SqlContext és SqlPipe, a felügyelt adatbázis-objektumok létrehozásához, hogy rövid szöveges üzenetet jelenítsen meg. A metódus a "Hello world!" sztringet is hozzárendeli egy out
paraméter értékeként. Ez a metódus tárolt eljárásként deklarálható az SQL Serverben, majd ugyanúgy futtatható, mint egy Transact-SQL tárolt eljárás.
Fordítsa le ezt a programot könyvtárként, töltse be az SQL Serverbe, és futtassa tárolt eljárásként.
Az SQL Server alapértelmezés szerint telepíti a .NET-keretrendszer újraterjesztési fájljait. Ezek a fájlok tartalmazzák a C# és a Visual Basic .NET programok parancssori fordítóit, csc.exe
és vbc.exe
. A minta fordításához módosítania kell az elérési út változóját, hogy a csc.exe
vagy vbc.exe
tartalmazó könyvtárra mutasson. Az alábbi elérési út a .NET-keretrendszer alapértelmezett telepítési útvonala.
C:\Windows\Microsoft.NET\Framework\(version)
A verzió tartalmazza a telepített .NET-keretrendszer verziószámát. Például:
C:\Windows\Microsoft.NET\Framework\v4.8.0
Miután hozzáadta a .NET-keretrendszer könyvtárát az elérési úthoz, a minta tárolt eljárást lefordíthatja egy összeállításba az alábbi paranccsal. A /target
opció lehetővé teszi, hogy lefordítsa egy assembly kódba.
C#-forrásfájlok esetén:
csc /target:library helloworld.cs
Visual Basic .NET-forrásfájlok esetén:
vbc /target:library helloworld.vb
Ezek a parancsok elindítják a C# vagy a Visual Basic .NET fordítót a /target
beállítással a kódtár DLL-jének létrehozásához.
A mintaeljárás sikeres fordítása után tesztelheti azt az SQL Serveren. Ehhez nyissa meg az SQL Server Management Studiót, és hozzon létre egy új lekérdezést, és csatlakozzon egy megfelelő tesztadatbázishoz (például a AdventureWorks2022
mintaadatbázishoz).
A közös nyelvi futtatókörnyezeti (CLR) kód végrehajtásának lehetősége alapértelmezés szerint OFF
az SQL Serverben. A CLR-kód a sp_configure
rendszer által tárolt eljárással engedélyezhető. További információért lásd: Engedélyezze a CLR-integrációt.
Létre kell hoznunk a szerelvényt, hogy hozzáférhessünk a tárolt eljáráshoz. Ebben a példában feltételezzük, hogy a helloworld.dll
szerelvényt a C:\
könyvtárban hozta létre. Adja hozzá a következő Transact-SQL utasítást a lekérdezéshez.
CREATE ASSEMBLY helloworld from 'C:\helloworld.dll' WITH PERMISSION_SET = SAFE
A szerelvény létrehozása után most már hozzáférhetünk a HelloWorld metódushoz a CREATE PROCEDURE
utasítás használatával. A tárolt eljárást hello
hívjuk:
CREATE PROCEDURE hello
(@i NCHAR (25) OUTPUT)
AS EXTERNAL NAME helloworld.HelloWorldProc.HelloWorld;
Megjegyzés
Az előző példában, ha a HelloWorldProc
osztály egy névtérben (más néven MyNS
) található, a létrehozási eljárás utasításának utolsó sora EXTERNAL NAME helloworld.[MyNS.HelloWorldProc].HelloWorld;
lesz.
Az eljárás létrehozása után ugyanúgy futtatható, mint a Transact-SQL-ben írt normál tárolt eljárás. Hajtsa végre a következő parancsot:
DECLARE @J AS NCHAR (25);
EXECUTE hello @J OUTPUT;
PRINT @J;
Itt a várt kimenet.
Hello world!
Hello world!
Ha befejezte a minta tárolt eljárás futtatását, eltávolíthatja az eljárást és a szerelvényt a tesztadatbázisból.
Először távolítsa el az eljárást a drop procedure paranccsal.
IF EXISTS (SELECT name
FROM sysobjects
WHERE name = 'hello')
DROP PROCEDURE hello;
Miután az eljárást elvetették, eltávolíthatja a mintakódot tartalmazó szerelvényt.
IF EXISTS (SELECT name
FROM sys.assemblies
WHERE name = 'helloworld')
DROP ASSEMBLY helloworld;
esemény
márc. 31. 23 - ápr. 2. 23
A legnagyobb SQL, Fabric és Power BI tanulási esemény. Március 31. – Április 2. A FABINSIDER kóddal 400 dollárt takaríthat meg.
Regisztráljon még ma